javascript addEventListener内存

如果我使用addEventListener在元素上注册一个事件,然后删除元素而不删除该事件,并且我反复这样做可以创建内存泄漏?


它不应该泄漏。 当一个事件处理程序导致主机对象<> JS对象循环是IE(高达版本7),IE(高达版本8)不支持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定义向上移动到replace体中。)


如果从DOM中删除了附加侦听器的元素,则会发生内存泄漏。 但是这只发生在IE中,Fx和其他人有先进的GC。

通常情况下,如果您使用DOM元素而不是通过DOM操作,但是喜欢

el.innerHTML = ...

例如,YUI具有自定义实现setInnerHTML,以防止在这种情况下发生内存泄漏。

链接地址: http://www.djcxy.com/p/45391.html

上一篇: javascript addEventListener memory

下一篇: 64bit exceptions in WndProc silently fail