2010-09-26 58 views
0

以下函数是否有内存泄漏?用于事件处理的JavaScript内存泄漏

var d = document.getElementById("d"); 
d.onclick = function() { 

    // blah... 

}; 
+3

您正在创建变量'd',但将''click'处理程序绑定到元素'div',这是您的* actual *代码吗? – 2010-09-26 10:40:06

+0

更正,谢谢。 – Howard 2010-09-26 10:42:09

回答

2
<div id="parent"> 
<span id="child">I am a span</span> 
</div> 

这是okie

var d = document.getElementById("child"); 
    d.onclick = function() { 

    // blah...  
}; 

//删除之前从处理程序会导致记忆力减退清除从DOM事件

现在这样做会开始泄漏内存

document.getElementById("parent").innerHTML=""; 
0

这不是内存泄漏。它将onclick处理程序附加到DOM元素,并且很常见。

0

所有的局部变量号,这是一个函数(堆栈)内声明的变量往往是很快失去范围的方法调用完成。

另外,当您完成d时,您也可以删除它; delete d;

+0

除非他们有下次使用... – 2010-09-26 10:46:50

+0

删除d;不起作用。删除仅用于对象属性。但是,d = null;作品。 – Nils 2012-11-03 15:18:11

1

不,这里没有内存泄漏。

此外,还可以使用数组取消引用,如果你只想做一个在线 -

document.getElementById("d").onclick = function() { 
    // blah... 
}; 

但如果元素不存在,这是危险的(或DOM还没有准备好,等),因为document.getElementById返回null如果在DOM中找不到该对象(并且虽然nullobject当你typeof,它试图设置它的属性并不酷)。

啊,JavaScript的怪癖。