以下函数是否有内存泄漏?用于事件处理的JavaScript内存泄漏
var d = document.getElementById("d");
d.onclick = function() {
// blah...
};
以下函数是否有内存泄漏?用于事件处理的JavaScript内存泄漏
var d = document.getElementById("d");
d.onclick = function() {
// blah...
};
<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="";
这不是内存泄漏。它将onclick
处理程序附加到DOM元素,并且很常见。
所有的局部变量号,这是一个函数(堆栈)内声明的变量往往是很快失去范围的方法调用完成。
另外,当您完成d
时,您也可以删除它; delete d;
除非他们有下次使用... – 2010-09-26 10:46:50
删除d;不起作用。删除仅用于对象属性。但是,d = null;作品。 – Nils 2012-11-03 15:18:11
不,这里没有内存泄漏。
此外,还可以使用数组取消引用,如果你只想做一个在线 -
document.getElementById("d").onclick = function() {
// blah...
};
但如果元素不存在,这是危险的(或DOM还没有准备好,等),因为document.getElementById
返回null
如果在DOM中找不到该对象(并且虽然null
是object
当你typeof
,它试图设置它的属性并不酷)。
啊,JavaScript的怪癖。
您正在创建变量'd',但将''click'处理程序绑定到元素'div',这是您的* actual *代码吗? – 2010-09-26 10:40:06
更正,谢谢。 – Howard 2010-09-26 10:42:09