詳解 js 閉包(圖文版)

(2)、如果兩個對象互相引用,而不再被第 3者所引用,那麼這兩個互相引用的對象也會被回收。

使用閉包的好處

那麼使用閉包有什麼好處呢?使用閉包的好處是:

1.希望一個變量長期駐紮在內存中2.避免全局變量的汙染3.私有成員的存在

一、全局變量的累加

詳解 js 閉包(圖文版)

二、局部變量

詳解 js 閉包(圖文版)

那麼怎麼才能做到變量a既是局部變量又可以累加呢?

三、局部變量的累加

詳解 js 閉包(圖文版)

在js中我們可以通過關鍵字 function來聲明一個函數:

詳解 js 閉包(圖文版)

我們也可以通過一個"()"來將這個聲明變成一個表達式:

詳解 js 閉包(圖文版)

四、模塊化代碼,減少全局變量的汙染

詳解 js 閉包(圖文版)

五、私有成員的存在

詳解 js 閉包(圖文版)

六.使用匿名函數實現累加

詳解 js 閉包(圖文版)

過度使用閉包會導致性能的下降。函數里放匿名函數,則產生了閉包

七、在循環中直接找到對應元素的索引

詳解 js 閉包(圖文版)

八、使用閉包改寫上面代碼

詳解 js 閉包(圖文版)

九.內存洩露問題

由於 IE的 js對象和 DOM對象使用不同的垃圾收集方法,因此閉包在 IE中會導致內存洩露問題,也就是無法銷燬駐留在內存中的元素

詳解 js 閉包(圖文版)

10.新增

很多初學者學了閉包後,可能也不懂到底在哪裡才有用到,甚至不懂閉包到底有啥用。 其實你寫的每一個js函數都是閉包,一個js函數的頂層作用域就是window對象,js的執行環境本身就是一個scope(瀏覽器的window/node的global),我們通常稱之為全局作用域。每個函數,不論多深,都可以認為是全局scope的子作用域,可以理解為閉包。


分享到:


相關文章: