js閉包的理解

語言: CN / TW / HK

任何在函式中定義的變數,都可以認為是私有變數,因為不能在函式的外部訪問這些變數 (變數的作用域)

1.當在函式內部定義了其他函式時,就建立了閉包。 閉包是一個函式,閉包會攜帶包含它的函式的作用域

例子:

當a函式執行完后里面的活動物件不會銷燬,因為b函式還在引用a函式作用域上的活動物件。直到b函式銷燬後,裡面的活動物件才被銷燬。

2.在後臺執行環境中,閉包的作用域鏈包含著它自己的作用域、包含函式的作用域和全域性作用域。

3.通常,函式的作用域及其所有變數都會在函式執行結束後被銷燬。

但是,當函式返回了一個閉包時,這個函式的作用域將會一直在記憶體中儲存到閉包不存在為止。

閉包的作用:

1.可以使用自執行函式與函式的結合全新的閉包作用域

2.生成全新的私有作用域,保護函式內的變數安全。使用閉包的私有作用域代替全域性變數,防止全域性汙染(在封裝js庫的時候就有用到)

3.在es5可以隔離 for迴圈中的var i變數的作用域

4.在記憶體中維持一個變數。