可能題目表達(dá)的不是很清除,但是我也不知道怎么去描述了,歡迎修改。
目前使用 jQuery Mobile
+ Phonegap
寫手機(jī)端程序。
程序采取 jQuery Mobile
默認(rèn)頁面跳轉(zhuǎn)方式,我把每個(gè)子頁面獨(dú)有的 js
放在 data-role="page"
的最后,這樣會(huì)產(chǎn)生一個(gè)問題,雖然隨時(shí)可以通過 $().remove()
去掉已加載的頁面 DOM,但如何去掉已經(jīng)不需要的子頁面 js
運(yùn)行結(jié)果呢?
比如某子頁面的 $().on()
已不再需要,何況 $()
對(duì)應(yīng)的 DOM 都被移除了。
寫到這里我突然發(fā)覺,是不是對(duì)應(yīng) DOM 被移除,其綁定的事件處理器也就被移除了,即對(duì)應(yīng) js
運(yùn)行的結(jié)果已經(jīng)被移除了? js
運(yùn)行的結(jié)果出了事件處理器還有啥?
學(xué)習(xí)是最好的投資!
JavaScript 的垃圾回收(GC)是自動(dòng)運(yùn)行的,只要有一個(gè)變量無法被引用到,就有可能(具體取決于 GC 的算法)在下次回收時(shí)釋放掉對(duì)應(yīng)的內(nèi)存。如果一個(gè) DOM 被移除了,且沒有變量引用它(或者引用它的變量已無法被引用到),那么就有可能在下次回收時(shí)被釋放掉。
一般只要不做出類似于「把所有已刪除的 DOM 保存在一個(gè)全局變量里」這樣的事情,通常情況下是不必關(guān)心 GC 的。局部變量不必手動(dòng)賦值為 null, 如果沒有閉包引用到局部變量的話,超出作用域(函數(shù))就不會(huì)有變量再引用到它了。
是不是對(duì)應(yīng) DOM 被移除,其綁定的事件處理器也就被移除了
除了IE外,其他內(nèi)核的瀏覽器,應(yīng)該都是這樣處理的,當(dāng)然包括webkit
。