7.JavaScript閉包
概念
閉包是函數,是能夠讀取其他函數內部變量的函數。例如:函數 A 返回了一個函數 B,並且函數 B 中使用了函數 A 的變量,函數 B 就被稱爲閉包。
特性
- 函數內部再嵌套函數
- 內部函數可以引用外層函數的參數和變量
內部函數的參數和變量不會被垃圾回收機制回收
作用
- 讀取函數內部的變量
- 讓這些變量始終保持在內存中,實現緩存
- 避免全局變量的污染
- 使用閉包主要是爲了設計私有的方法和變量,即封裝對象的私有屬性和私有方法,實現封裝
利用閉包可以突破作用鏈域
缺點
- 消耗內存。閉包使數據會常駐內存,會增大內存使用量。
內存泄漏。使用不當很容易造成內存泄露。
注意
- 由於閉包會使得函數中的變量都被保存在內存中,內存消耗很大,所以不能濫用閉包,否則會造成網頁的性能問題,在IE中可能導致內存泄露。
解決方法是,在退出函數之前,將不使用的局部變量全部刪除。
參考鏈接:
http://blog.poetries.top/FE-Interview-Questions/base/#_1-%E9%97%AD%E5%8C%85
http://blog.poetries.top/FE-Interview-Questions/advance/#_9-%E9%97%AD%E5%8C%85