[JavaScript] 什麼是 閉包 (Closure)?
閉包 (Closure)
是在開發 JavaSctip 時,宣告函式的一種模式,以在 MDN 中是這樣解釋:
閉包 (Closure)
是指能使用獨立(自由)變數的函式(在使用運用,但在封閉的作用域中定義)。換言之,這些函式能「記得」被建立時的環境。
光看上面的文字敘述,其實是有點難懂的,下面我們以實例來說明:
下面是一個簡單的閉包:
function makeAdder(x) {
return function(y) {
return x + y;
};
}
使用上粗俗一點的說,就是直接在一個 function
裡,執行
或是 return
一個 function
真正在實作上的時候,感覺有點像是 JavaScript 使用 new
的方法,產生出相同物件的概念,如下:
var add5 = makeAdder(5);
此時你將 5
的值,帶入了 makeAdder()
內的 x
,這時你剛剛宣告的 add5
則會等於:
var add5 = function(y){
return 5 + y;
}
等於是說,我們藉由最上面的 閉包 (Closure)
函式,建立了一個 x
為 5
作為環境的新函式
,我們來實際執行 add5()
的函式:
add5(5)
執行結果:
10
實作 閉包 (Closure)
的案例: