JavaScript中的内存泄漏用于事件处理

时间:2010-09-26 10:38:43

标签: javascript

以下功能是否有内存泄漏?

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

    // blah...

};

4 个答案:

答案 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;