1

我有一个应用程序,用户可以在其中创建和销毁图形对象。这些对象中的每一个都会产生多个事件侦听器。当对象被销毁(从 DOM 中删除)时,我是否必须删除所有这些事件侦听器?如果我不这样做会发生什么?

在这种情况下,事件侦听器位于mousedown对象mouseup本身和mousemove文档正文上,但在一般情况下最佳实践是什么。

4

3 回答 3

0

如果该对象已从 DOM 中删除,并且您在实时 Javascript 变量中没有对它的任何引用,则该对象将被垃圾收集,并且与之关联的任何事件处理程序也将被丢弃。您不需要先明确清除处理程序。

于 2013-08-30T21:20:35.743 回答
0

最坏的情况——你的事件仍然以某种方式被触发,你的代码占用了大量不必要的资源。

如果您真的要从 DOM 中删除元素,那么这可能无关紧要,但它仍然可能导致内存泄漏,具体取决于代码的范围闭包

如果不难,删除它们很好。我不会说这是必需的。

于 2013-08-30T21:21:39.970 回答
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

于 2013-08-30T21:24:58.797 回答