JS中用函數聲明和函數表達式兩種方式建立函數的區別

在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

相關文章
相關標籤/搜索