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

ecr*_*345 6 javascript javascript-events onunload

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

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

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

jfr*_*d00 6

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

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