JavaScript中用于事件处理的内存泄漏
以下功能是否存在内存泄漏JavaScript中用于事件处理的内存泄漏,javascript,Javascript,以下功能是否存在内存泄漏 var d = document.getElementById("d"); d.onclick = function() { // blah... }; 这不是内存泄漏。它将onclick处理程序附加到DOM元素,这是很常见的。这不是内存泄漏。它将onclick处理程序附加到DOM元素,这是非常常见的 所有局部变量,即在函数(堆栈上)内声明的变量,在方法调用完成后往往会失去作用域 此外,当您使用d时,也可以将其删除删除d否 所有局部变量,即在函数(堆栈上)
var d = document.getElementById("d");
d.onclick = function() {
// blah...
};
这不是内存泄漏。它将
onclick
处理程序附加到DOM元素,这是很常见的。这不是内存泄漏。它将onclick
处理程序附加到DOM元素,这是非常常见的
所有局部变量,即在函数(堆栈上)内声明的变量,在方法调用完成后往往会失去作用域
此外,当您使用d
时,也可以将其删除<代码>删除d代码>否
所有局部变量,即在函数(堆栈上)内声明的变量,在方法调用完成后往往会失去作用域
此外,当您使用
d
时,也可以将其删除<代码>删除d代码>不,这里没有内存泄漏
此外,如果只想在一行中执行,可以使用数组反引用-
document.getElementById("d").onclick = function() {
// blah...
};
但是如果元素不存在(或者DOM没有准备好,等等),这是危险的,因为document.getElementById
返回null
,如果在DOM中找不到该对象(尽管null
在typeof
时是对象,但尝试在其上设置属性并不酷)
啊,JavaScript的怪癖。不,这里没有内存泄漏
<div id="parent">
<span id="child">I am a span</span>
</div>
此外,如果只想在一行中执行,可以使用数组反引用-
document.getElementById("d").onclick = function() {
// blah...
};
但是如果元素不存在(或者DOM没有准备好,等等),这是危险的,因为document.getElementById
返回null
,如果在DOM中找不到该对象(尽管null
在typeof
时是对象,但尝试在其上设置属性并不酷)
啊,JavaScript的怪癖
<div id="parent">
<span id="child">I am a span</span>
</div>
//在从dom中删除处理程序之前从dom中清除事件将导致内存丢失
现在这样做将开始泄漏内存
document.getElementById("parent").innerHTML="";
//在从dom中删除处理程序之前从dom中清除事件将导致内存丢失
现在这样做将开始泄漏内存
document.getElementById("parent").innerHTML="";
您正在创建变量d
但将click
处理程序绑定到元素div
,这是您的实际代码吗?您正在创建变量d
但将click
处理程序绑定到元素div
,这是您的实际代码吗?删除d;不起作用。删除仅适用于对象属性。然而,d=null;工程.删除d;不起作用。删除仅适用于对象属性。然而,d=null;作品