跳至內容

JavaScript/匿名函數和閉包

維基教科書,自由的教學讀本

匿名函數

[編輯]

匿名函數是一種沒有函數名的函數。 在 Javascript 中,有時我們定義函數為

function(){
    //some code
}

這種定義經常出現在向某些函數傳遞迴調函數的場景下,由於回調函數使用一次後就會銷毀(離開調用者作用域),函數名就變得多餘。

或者定義為

(function(){
    //some code
})()

這種定義實際上定義了一個匿名函數且只執行一次, 主要用於提供局部變量的作用域 以上兩種均為匿名函數

閉包

[編輯]

閉包指的是函數的局部變量不與外界共享的語法特性。如下例:

var a=1;
function outerFunction(){
    var a=2;
    console.log("函数内的a=" + a);
}
outerFunction();
console.log("函数外的a=" + a);

輸出:

函数内的a=2
函数外的a=1

之前提到過JavaScript中的函數也是對象,那麼能不能將函數作為對象返回呢?答案是可以。

作為返回值的函數,可以將函數內部的值傳遞到外部。如下例:

var a=1;
function outerFunction(){
    var a=2;
    console.log("函数内的a=" + a);
    return function(){
        console.log("返回值函数访问的a=" + a);
    }
}
var innerFunction=outerFunction();
innerFunction();
console.log("函数外的a=" + a);

輸出:

函数内的a=2
返回值函数访问的a=2
函数外的a=1