Javascript addEventListener内存泄漏

Javascript addEventListener内存泄漏,javascript,dom,memory-leaks,Javascript,Dom,Memory Leaks,在元素上通过注册事件时,然后在不删除事件的情况下删除该元素,并且重复这样做,内存是否会“泄漏”?它不应该泄漏。当事件处理程序导致主机objectJS对象循环时,最臭名昭著的泄漏浏览器是IE(版本7之前),IE(版本8之前)不支持addEventListener 如果要在特定浏览器中进行测试,请保持此选项处于运行状态,并查看浏览器的内存使用情况在长期内是如何受到影响的 <div id="x"></div> <script type="text/javascript"&

在元素上通过注册事件时,然后在不删除事件的情况下删除该元素,并且重复这样做,内存是否会“泄漏”?

它不应该泄漏。当事件处理程序导致主机objectJS对象循环时,最臭名昭著的泄漏浏览器是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>

函数替换(){
var x=document.getElementById('x');
如果(x.firstChild!==null)
x、 removeChild(x.firstChild);
var el=document.createElement('p');
el.addEventListener('click',click,false);
x、 儿童(el);
}
函数单击(){
警报(“点击”);
};
设置间隔(替换,1);

(要在存在引用循环的情况下对其进行测试,请将
函数单击
定义向上移动到
replace
正文中。)

如果从DOM中删除已附加侦听器的元素,将导致内存泄漏。 但这只发生在IE、Fx和其他具有高级GC的应用程序中

通常情况下,如果不是通过DOM操作DOM元素,而是像

el.innerHTML = ...

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

喜欢您使用
innerHTML