在JS中建立函數的方式有不少種,本文主要講解函數聲明(function declaration)和函數表達式(function expression)兩種方式建立函數的區別.express
function add1(a, b) { return a + b; } // function declaration var add2 = function(a, b) { return a+b; }; // function expression
上面是這兩種方法建立函數的格式
他倆的區別主要在對待JS對待這兩種方式的處理方式上,前者看做函數,後者爲變量。JS在執行代碼的時候,會有一個叫作Hoisting的操做,Hoisting的結果,把對那些變量和函數進行預處理,把他們放在前面了,而變量只放過去變量名,函數卻都被放過去了。好比咱們看下面代碼來理解一下。函數
console.log(a); var a = '1'; console.log(a); // undefined 1;
而對於函數code
console.log(a()); function a() { console.log('lol'); } console.log(a()); // lol lol;
從上面能夠看出,雖然變量和函數都被Hoisting,可是處理的方式倒是不一樣的,把這個處理方式應用到上面兩種函數聲明上面,第一種被看過函數,第二種被看做變量,那區別就很顯然了:第二種函數的聲明必須在函數調用的前面,第一個則無需這樣。咱們再來看最後一個例子:io
var result1 = add1(1, 1); function add1(n1, n2) { return n1 + n2; } var result2 = add2(1,1) var add2 = function(n1, n2) { return n1 + n2; }; result1 // 2 result2 // undefined
幫到你了嗎?console