1

我有一個應用程序,用戶可以在其中創建和銷燬圖形對象。這些對象中的每一個產生多個事件監聽器。當對象被銷燬(從DOM中刪除)時,我是否必須刪除所有這些事件偵聽器?如果我不這樣怎麼辦?我在JavaScript中清除事件處理程序有多重要?

在這種情況下,事件偵聽器在對象本身上是mousedownmouseup,文檔正文上是mousemove,但在一般情況下最佳做法是什麼。

回答

0

如果從DOM中刪除對象,並且在實時Javascript變量中沒有對它的任何引用,則該對象將被垃圾收集,並且與它關聯的任何事件處理程序也將被丟棄。您不需要首先明確清除處理程序。

0

最糟糕的情況 - 您的事件仍然以某種方式觸發,您的代碼佔用了大量不必要的資源。

如果您真的從DOM中刪除元素,那麼它可能並不重要,但它仍可能導致內存泄漏,具體取決於代碼的scopeclosure

如果不難,刪除它們是很好的。我不會說這是必需的。

0

在現代瀏覽器(chrome/firefox/webkit)中,並不重要 - 當處理DOM元素時,與它們綁定的事件處理程序也是如此,因爲兩者都由相同的內存管理器處理。

對於IE9及以上版本也是如此。

但是,對於IE8和IE7,DOM和jScript有單獨的內存管理器,這意味着除非您在處理DOM元素之前解除綁定事件並清空事件處理程序,否則不會釋放內存。

您可以在這裏IE版本閱讀更多關於內存泄漏:

http://javascript.crockford.com/memory/leak.html

http://blog.j15r.com/blog/2009/07/12/Memory_Leaks_in_IE8

http://msdn.microsoft.com/en-us/library/bb250448(v=vs.85).aspx

http://www.codeproject.com/Articles/12231/Memory-Leakage-in-Internet-Explorer-revisited