JavaScript事件监听器是否自动清理?

时间:2015-01-17 01:40:48

标签: javascript javascript-events onunload

从DOM中删除元素后,是否会自动取消注册其事件侦听器并清除其引用的资源(闭包)?如果是,如果某些非事件侦听器代码包含对该元素的引用,答案是否会更改?

我特别关注的是“伪导航”,其中unload事件被触发并且大部分文档被替换(当然,许多替换元素也会注册事件监听器),但可能存在几个伪 - 发生另一个整页加载之前的导航。所以我想知道是否有必要跟踪所有添加的事件监听器并在unload触发时手动删除它们以避免泄漏它们引用的任何资源。

(注意:在我的情况下,“使用jQuery / [其他js库]来处理它”不是一个有效的解决方案。我对与IE8 +的兼容性以及其他浏览器的合理新版本感兴趣。)

1 个答案:

答案 0 :(得分:6)

在现代浏览器中将DOM元素作为垃圾收集过程的一部分进行垃圾收集时,将删除并清除事件处理程序。请注意,这与从DOM中删除时不同,因为如果任何Javascript引用了已删除的DOM元素,它将被保留并且不会被垃圾回收。

注意:这是预期的功能 - 一些旧的浏览器可能在这方面有一些错误。较旧版本的IE最容易出现垃圾收集问题。旧的IE版本记录了许多其他类型的GC问题,但我不知道您所描述的案例中的任何特定问题。