栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如果删除了DOM元素,是否还将其侦听器也从内存中删除了?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如果删除了DOM元素,是否还将其侦听器也从内存中删除了?

现代浏览器

纯Javascript

如果删除的DOM元素是无引用的(没有指向它的引用),则是垃圾收集器以及与之关联的任何事件处理程序/侦听器都会拾取该元素本身。

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()
)将以完全相同的方式起作用(考虑
remove()
是使用
removeChild()
示例编写的),这是公平的。

但是, 这不是真的 ;jQuery库实际上有一个内部方法(该方法未公开,理论上可以随时更改),称为

cleanData()
此方法看起来像这样,该方法会在从DOM中删除后自动清除与元素关联的所有数据/事件(通过是这样。
remove()
empty()
html("")
等等)。


较旧的浏览器

已知较旧的浏览器(尤其是IE的较旧版本)会出现内存泄漏问题,这是因为事件侦听器保留了对其所附加元素的引用。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/506653.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号