【发布时间】:2015-05-12 16:06:31
【问题描述】:
假设我有这个 JQuery 代码,它通过它的 ID 选择和获取一个元素,然后将 click 事件放入它:
$( "someID" ).click( dummyCallback );
在后面的代码中,我使用 replaceWith() 或 remove() 函数从 DOM 中删除了这个元素。
$( "someID" ).replaceWith( "<div>New Element</div>" );
所以这个元素将从 DOM 中消失,但是绑定到它的事件呢? 据我了解,事件也是对象并占用内存空间。
JavaScript/JQuery 是否也会清理该对象,或者在删除我应该做的元素之前:
$( "someID" ).off( "click" );
【问题讨论】:
-
理论上是的。当调用
remove()、off()、empty()等时,jQuery 会尽力销毁所有不再使用的资源,但它主要取决于您正在使用的浏览器的 JavaScript 实现是否该内存再次被标记为可用。 -
jQuery 的核心架构目标之一(至少从历史上看)是防止内存泄漏问题,尤其是在旧版本的 Internet Explorer 中。
-
除了元素本身,所有与元素相关的绑定事件和jQuery数据都被移除 (ref.)
-
感谢您提供这些出色的答案,我无法相信你们的速度有多快。 @hindmost 是的,我现在看到了,它就在用于 remove() 和 replaceWith() 函数的 JQuery 文档中。
标签: javascript jquery html dom garbage-collection