在元素上通过addEventListener
注册事件时,如果不删除该事件就删除该元素,重复这样做会使内存“泄露”吗?
答案 0 :(得分:5)
它不应该泄漏。当事件处理程序导致主机对象<> JS-object循环时,一个臭名昭着的漏洞就像IE(最高版本7)和IE(最高版本8)不支持{{1} }。
如果您想在特定浏览器中测试浏览器的内存使用情况,请远程运行并查看浏览器的内存使用情况如何受到影响。
addEventListener
(要使用参考循环进行测试,请将<div id="x"></div>
<script type="text/javascript">
function replace() {
var x= document.getElementById('x');
if (x.firstChild!==null)
x.removeChild(x.firstChild);
var el= document.createElement('p');
el.addEventListener('click', click, false);
x.appendChild(el);
}
function click() {
alert('click');
};
setInterval(replace, 1);
</script>
定义移至function click
正文。)
答案 1 :(得分:0)
如果从DOM(已附加侦听器的元素)中删除,则会出现内存泄漏。 但这只发生在IE,Fx和其他人已经提升GC。
通常会发生这种情况,如果你使用DOM元素而不是通过DOM操作,而是像
那样el.innerHTML = ...
例如,YUI具有自定义实现setInnerHTML,以防止在这种情况下发生内存泄漏。