我的一位同事總是將自己的jQuery的變量爲null,有效地處理他們,一旦他們有完成,e.g:你應該拋棄jQuery對象嗎?
var bigThing = $(body);
// ...
// Do some stuff
// ...
bigThing = null;
是不是真的有必要嗎?
我的一位同事總是將自己的jQuery的變量爲null,有效地處理他們,一旦他們有完成,e.g:你應該拋棄jQuery對象嗎?
var bigThing = $(body);
// ...
// Do some stuff
// ...
bigThing = null;
是不是真的有必要嗎?
如果將代碼封裝到函數中,那麼函數完成後就不需要這些函數,否則在其他地方沒有引用它們時,局部變量將被終止。
握住選擇/變量(緩存)如果你需要一遍又一遍地選擇同樣的事情再次與只有一次選擇它,並保持變量可能有一定的積極作用壽。
雖然不是完全必要的,但可以這樣做,以確保GC在下一次運行中清除它(無論如何,對於所有沒有1次引用的分配,它都會這樣做)。
在您的例子雖然,$(體)對象(jQuery的擴展對象,而不是DOM body對象)也會在設置bigThing
其他任何事情(不一定爲null)
這是沒有必要清除,但很好的習慣,刪除參考和釋放內存
JavaScript有它自己的垃圾收集器。所以,看起來你不需要明確地處理這些對象。
但是由於各種原因,比如垃圾回收器的不好實現等,可能會發生它們存在內存泄漏的情況。
通過顯式取消它們,您指定瀏覽器在下一次垃圾回收中必須清除此內存。
總而言之,雖然沒有必要這樣做,但是取消JQuery/javascript對象將是一個好習慣。
我認爲「取消對象」是一個誤稱。你肯定無效的變量;該對象只是取消引用。 – PPvG 2012-01-05 09:24:07
簡短的回答:沒有這幾乎沒有必要的,如果你正在使用jQuery。
這取決於你用它做了什麼。如果您沒有將任何事件處理程序附加到DOM節點,則垃圾收集器將在不再引用它時清除它。
但即使您確實附加了事件處理程序,jQuery也會通過爲您分離所有事件處理程序來處理諸如.remove()和.empty()之類的函數。所以只要你使用jQuery與DOM進行交互,你就很安全。
沒有jQuery的,如果你已經附加一個事件處理程序的節點時,GC不會清除它,你已經移除了DOM樹的節點即使你不再有任何引用。這是因爲DOM節點包含對JavaScript對象的引用(即事件處理程序),反之亦然。這將跨兩個獨立的系統創建一個循環參考;大多數垃圾收集器都遇到了麻煩。
如需進一步閱讀,我將您指向Douglas Crockford's article on Memory Leaks。
可能的重複[在不再需要變量時將變量設置爲null是否很好?](http:// stackoverflow。com/questions/7189809/javascript-set-value-null) – 2012-01-05 09:24:04
謝謝,是的,這個問題確實非常相似,並且有一個很好的答案。 – Jay 2012-01-09 16:20:19