首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在element.parentNode.removeChild(element)之前是否需要element.removeEventListener()?

在element.parentNode.removeChild(element)之前是否需要element.removeEventListener()?
EN

Stack Overflow用户
提问于 2014-10-19 00:32:30
回答 1查看 1.9K关注 0票数 10

假设我的文档中有一个元素数组,这些元素是单个对象的子元素。这些元素中的每个元素都使用不同的参数注册一个新的事件侦听器。如果放弃父对象,是否需要手动注销所有eventListeners?或者,当我从DOM中删除元素时,浏览器会跟踪所有事件侦听器并丢弃它们吗?我问这个问题的原因是,跟踪所有事件,然后调用removeEventListener看起来浏览器应该足够智能来解决这个问题,但我担心如果我不这样做,我会泄漏内存。

例如:

代码语言:javascript
复制
var elements = parent.childNodes;
var listeners = [];
for (var i = 0; i

and later:

代码语言:javascript
复制
for (var i = 0; i

What's the typical approach? I realize a simple way would be to store the event listener reference on the element itself, but I wonder if modifying the type of the element is going to cause extra performance issues?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-19 00:48:40

在现代浏览器中,在从DOM中删除元素之前,不需要删除事件侦听器。如果在javascript中的其他地方没有对特定DOM元素的直接引用(例如,存储在JS变量中的DOM元素引用),那么DOM元素将在移除后被垃圾回收。

DOM GC非常聪明,它知道一旦从DOM中删除DOM元素,事件侦听器就不会被视为对该元素引用(因为从DOM中删除时不会发生DOM事件)。

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26442041

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档