關於 Javascript 的閉包

w3schools 上,對閉包解釋的比較清楚。 — 它相當於讓 function 有了自己的私有變量。
其例子是“計數器困境”,現引用如下。

計數器困境

首先 javascript 沒有塊作用域的概念。只有 global 和 local 的概念。分別對應於網頁範圍和函數範圍。

如果想用 javascript 實現一個計數器,可以:

var counter = 0;
function add() {
    counter  += 1;
}

但問題是,誰都可以改這個 counter, 鬱悶。

改成普通的函數呢? 似乎也不行。下面的函數不會有記憶,counter 總是1

function add() {
    var coutner = 0;
    counter += 1;
}

怎麼辦呢? closure 來幫助。

// closure 的例子
var add = (function () {
    var counter = 0;
    return function () {return counter += 1;}
})();

這裏用了一個立即執行的函數 (IIFE),執行一個匿名函數。該匿名函數返回一個帶有閉包的函數。每次調用把 counter 加 1

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章