以下功能是否有内存泄漏?
var d = document.getElementById("d");
d.onclick = function() {
// blah...
};
答案 0 :(得分:2)
<div id="parent">
<span id="child">I am a span</span>
</div>
这很好
var d = document.getElementById("child");
d.onclick = function() {
// blah...
};
//从dom中清除事件然后从中删除处理程序将导致内存丢失
现在这样做会开始泄漏内存
document.getElementById("parent").innerHTML="";
答案 1 :(得分:1)
不,这里没有内存泄漏。
此外,如果您只想在一行中执行此操作,则可以使用数组取消引用 -
document.getElementById("d").onclick = function() {
// blah...
};
但是如果元素不存在(或者DOM没有准备好等等)这很危险,因为如果在DOM中找不到对象,document.getElementById
会返回null
(和< em>虽然 null
在您object
时是typeof
,但尝试在其上设置属性并不酷。)
啊,JavaScript的怪癖。
答案 2 :(得分:0)
这不是内存泄漏。它将onclick
处理程序附加到DOM元素并且很常见。
答案 3 :(得分:0)
没有。
所有局部变量,即在函数内部(在堆栈上)声明的变量,一旦方法调用完成,就会失去范围。
此外,当您完成d
后,您也可以将其删除; delete d;