js閉包的理解

語言: CN / TW / HK

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

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

例子:

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

2.在後台執行環境中,閉包的作用域鏈包含着它自己的作用域、包含函數的作用域和全局作用域。

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

但是,當函數返回了一個閉包時,這個函數的作用域將會一直在內存中保存到閉包不存在為止。

閉包的作用:

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

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

3.在es5可以隔離 for循環中的var i變量的作用域

4.在內存中維持一個變量。