我有一个关于添加/删除 DOM 对象的侦听器的快速问题。
我想问垃圾收集器是否能够在从页面中删除元素时收集内存。
示例:一个<ul>
带有几个孩子列表的标签(<li>
)
var ul = document.getElementById('someParent');
var children = ul.children;
var someFunction = function() {};
for(var i = 0; i < children.length; i++) {
children[i].addEventListener('click', someFunction);
}
// This is where I am not sure, would the garbage collector be able to collect
// the memory allocated on adding listener on children,
// if I remove the ul tag?
ul.remove();
线路ul.remove();
将删除ul
DOM 中的元素及其所有子元素。但是只要您引用了这些侦听器,事件侦听器的内存就不会被释放,li
元素,以及ul
元素。你确实有变量children
, someFunction
and ul
.
如果你想让垃圾收集器清理所有这些,你可以这样做:
ul.remove();
children = null;
someFunction = null;
ul = null;
这样变量children
不会保存对这些元素的引用,如果代码中没有任何其他变量来保存这些元素的引用,垃圾收集器将收集它们。这同样适用于someFunction
。注意ul
元素保存对其子元素和侦听器的所有引用,因此ul
也必须清洁。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)