Javascript 我应该在removeChild之前从元素中删除事件处理程序吗?

Javascript 我应该在removeChild之前从元素中删除事件处理程序吗?,javascript,events,dom,Javascript,Events,Dom,比如说,我有一个元素作为,并附加了一些事件,例如单击(不是内联onclick!) 我是否也需要删除所有事件?从DOM中删除元素不会(或不应该)删除其任何侦听器;毕竟,您可能正处于重新安排DOM元素的过程中,因此您不想丢弃任何侦听器 您可以在之前或之后删除侦听器,这不会有任何区别 如果您的计划是删除元素,并且不再使用它们,那么最好继续删除事件,以避免内存泄漏的任何可能性。说明: 为了避免内存泄漏,jQuery删除 其他构造,如数据和 子元素中的事件处理程序 在移除元件之前 他们自己 因此:1)如果

比如说,我有一个元素作为
,并附加了一些事件,例如
单击
(不是内联
onclick
!)


我是否也需要删除所有事件?

从DOM中删除元素不会(或不应该)删除其任何侦听器;毕竟,您可能正处于重新安排DOM元素的过程中,因此您不想丢弃任何侦听器

您可以在之前或之后删除侦听器,这不会有任何区别

如果您的计划是删除元素,并且不再使用它们,那么最好继续删除事件,以避免内存泄漏的任何可能性。

说明:

为了避免内存泄漏,jQuery删除 其他构造,如数据和 子元素中的事件处理程序 在移除元件之前 他们自己

因此:1)如果我们没有显式删除事件处理程序,就会出现内存泄漏;2)通过使用
empty()
,我们可以避免内存泄漏


另请参见此

DOM不(或不应该)删除其任何侦听器
。我想对我来说已经足够了。谢谢@qeremy你对哪部分有问题?内存泄漏怎么办?当节点明显被丢弃时,是否解除事件绑定是否重要?从这个答案中不完全清楚是否需要删除事件处理程序。可能它们在不再被任何变量引用后被浏览器隐式删除?@RobW如果我要取消引用,我可能会在执行此操作之前删除任何绑定的侦听器。我目前没有任何数据或引用来支持这一点——我只是一个偏执的开发人员,花了10多年的时间与这些浏览器争论。可能是重复的
// somewhere i wrote
foo.addEventListener("click", clickHandler, false);
...
// somewhere i will write
foo.parentNode.removeChild(foo);