我將舉一個例子(用JavaScript):
function makeCounter () {
var count = 0;
return function () {
count += 1;
return count;
}
}
var x = makeCounter();
x(); returns 1
x(); returns 2
...etc...
這個函數(shù)makeCounter所做的是返回一個函數(shù),我們稱之為x,它每次調(diào)用時都會計數(shù)一次。因為我們沒有為x提供任何參數(shù),所以它必須以某種方式記住計數(shù)。它知道在什么叫做詞法作用域的基礎(chǔ)上找到它-它必須尋找它定義的地方,以找到值。這個“隱藏”值就是所謂的閉包。
我再舉一個例子:
function add (a) {
return function (b) {
return a + b;
}
}
var add3 = add(3);
add3(4); returns 7
您可以看到,當(dāng)您使用參數(shù)a(即3)調(diào)用Add時,該值包含在返回函數(shù)的閉包中,我們將其定義為add3。這樣,當(dāng)我們調(diào)用add3時,它知道在哪里找到執(zhí)行加法的a值。