js閉包的理解

任何在函數中定義的變量,均可以認爲是私有變量,由於不能在函數的外部訪問這些變量 (變量的做用域)安全

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

例子:函數

a函數內進行return 另外一個b函數,被包含的b函數由於做用域鏈拿到了上級a函數做用域的私有變量,當在外部調用a函數而且執行a函數的返回值b函數時,也就能在外部順利拿到了a函數中做用域的私有變量。

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

2.在後臺執行環境中,閉包的做用域鏈包含着它本身的做用域、包含函數的做用域和全局做用域。 對象

3.一般,函數的做用域及其全部變量都會在函數執行結束後被銷燬。
可是,當函數返回了一個閉包時,這個函數的做用域將會一直在內存中保存到閉包不存在爲止。內存

閉包的做用:

1.能夠使用自執行函數與函數的結合全新的閉包做用域
2.生成全新的私有做用域,保護函數內的變量安全。使用閉包的私有做用域代替全局變量,防止全局污染(在封裝js庫的時候就有用到)
3.在es5能夠隔離 for循環中的var i變量的做用域
4.在內存中維持一個變量。作用域

相關文章
相關標籤/搜索