我有一个应用程序,用户可以在其中创建和销毁图形对象。这些对象中的每一个都会生成多个事件侦听器。当对象被销毁(从DOM中删除)时,我是否必须删除所有这些事件侦听器?如果我不这样做会发生什么?
在这种情况下,事件监听器在对象本身上是mousedown
和mouseup
,在文档正文中是mousemove
,但在一般情况下是最佳做法。
答案 0 :(得分:0)
如果从DOM中删除了对象,并且您在实时Javascript变量中没有对它进行任何引用,则该对象将被垃圾收集,并且与其关联的任何事件处理程序也将被丢弃。您不需要首先明确清除处理程序。
答案 1 :(得分:0)
最糟糕的情况 - 您的事件仍然以某种方式被触发,并且您的代码占用了大量不必要的资源。
如果您真正从DOM中删除元素,那么它可能无关紧要,但它仍可能导致内存泄漏,具体取决于代码的scope和closure。
如果不难,删除它们很好。我不会说这是必需的。
答案 2 :(得分: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