[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) 函式,建立了一個 x5作為環境的新函式,我們來實際執行 add5() 的函式:

add5(5)

執行結果:

10

實作 閉包 (Closure) 的案例:

Facebook 功能: