js如何监听元素事件是否被移除_javascript – 如果一个DOM元素被删除,它的监听器也从内存中删除?...

现代浏览器

纯JavaScript

如果被删除的DOM元素是无引用的(没有指向它的引用),那么yes – 该元素本身被垃圾收集器以及与其相关联的任何事件处理器/监听器拾取。

var a = document.createElement('div');

var b = document.createElement('p');

// Add event listeners to b etc...

a.appendChild(b);

a.removeChild(b);

b = null;

// A reference to 'b' no longer exists

// Therefore the element and any event listeners attached to it are removed.

然而;如果有仍然指向所述元素的引用,则该元素及其事件侦听器保留在存储器中。

var a = document.createElement('div');

var b = document.createElement('p');

// Add event listeners to b etc...

a.appendChild(b);

a.removeChild(b);

// A reference to 'b' still exists

// Therefore the element and any associated event listeners are still retained.

jQuery

可以公平地假定jQuery中的相关方法(例如remove())将以完全相同的方式运行(考虑使用removeChild()写入remove())。

然而,这不是真的; jQuery库实际上有一个内部方法(它是无证的,并且理论上可以随时更改),称为cleanData()(here is what this method looks like),该方法在从DOM中删除时自动清理所有与一个元素相关的数据/事件(通过。remove(),empty(),html(“”)等)。

旧版浏览器

早期的浏览器 – 特别是IE的旧版本 – 已知存在内存泄漏问题,因为事件侦听器保持对其附加的元素的引用。

还有一些与此相关的文章:

在这种情况下手动删除侦听器可能是一个很好的习惯(只有内存对于你的应用程序是至关重要的,你实际上是针对这样的浏览器)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值