addEventListener内存泄漏

时间:2010-04-13 16:22:16

标签: javascript dom memory-leaks

在元素上通过addEventListener注册事件时,如果不删除该事件就删除该元素,重复这样做会使内存“泄露”吗?

2 个答案:

答案 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,以防止在这种情况下发生内存泄漏。