JavaScript面試題總結系列(七)

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
相關文章
相關標籤/搜索