Javascript 此解决方案处理DOM内存泄漏是否正确
全部: 当我尝试学习JSDOM内存泄漏教程时,有一个关于旧IE的内存泄漏示例(7,8):Javascript 此解决方案处理DOM内存泄漏是否正确,javascript,dom,memory-management,Javascript,Dom,Memory Management,全部: 当我尝试学习JSDOM内存泄漏教程时,有一个关于旧IE的内存泄漏示例(7,8): 点击我 var btn=document.getElementById(“myBtn”); btn.onclick=函数(){ document.getElementById(“myDiv”).innerHTML=“处理…”; } 它给出的解决方案是: <div id="myDiv"> <button id="myBtn">Click Me</button>
点击我
var btn=document.getElementById(“myBtn”);
btn.onclick=函数(){
document.getElementById(“myDiv”).innerHTML=“处理…”;
}
它给出的解决方案是:
<div id="myDiv">
<button id="myBtn">Click Me</button>
</div>
<script type="text/javascript">
var btn = document.getElementById("myBtn");
btn.onclick = function(){
btn.onclick = null;
document.getElementById("myDiv").innerHTML = "Processing...";
}
</script>
点击我
var btn=document.getElementById(“myBtn”);
btn.onclick=函数(){
btn.onclick=null;
document.getElementById(“myDiv”).innerHTML=“处理…”;
}
我的问题是:
btn
变量仍然引用DOM,这导致它无法GCed,为什么这可以成为解决方案谢谢两种情况下都有泄漏。您必须释放指向DOM对象的
btn
变量和onclick
事件以停止侦听该事件。这两种情况下都存在泄漏。您必须释放指向DOM对象的btn
变量和onclick
事件以停止侦听该事件。@ibrahimmahrir感谢您的回复。我想我有点糊涂了。我想问的是为什么这个解决方案有效,而不是为什么这是一个记忆leak@ibrahimmahrir在这个具体的例子中,你能稍微说说是什么导致了循环引用吗?我真的很难理解为什么这是一个循环refkuan实际上我认为我对循环引用是错误的。在这个例子中似乎没有你的另一个问题中的例子。@ibrahimmahrir谢谢你澄清我的想法。“这种内存泄漏让我很难受。”易卜拉欣·赫里尔:谢谢你的回复。我想我有点糊涂了。我想问的是为什么这个解决方案有效,而不是为什么这是一个记忆leak@ibrahimmahrir在这个具体的例子中,你能稍微说说是什么导致了循环引用吗?我真的很难理解为什么这是一个循环refkuan实际上我认为我对循环引用是错误的。在这个例子中似乎没有你的另一个问题中的例子。@ibrahimmahrir谢谢你澄清我的想法。这个内存泄漏的东西让我很难受。谢谢,这也是我的想法,谢谢你的澄清。这让我感到困惑,因为在我读到的文章中,第二部分代码标记为解决方案。谢谢,这也是我的想法,谢谢你的清晰。这让我感到困惑,因为在我读到的文章中,第二部分代码标记为解决方案。
<div id="myDiv">
<button id="myBtn">Click Me</button>
</div>
<script type="text/javascript">
var btn = document.getElementById("myBtn");
btn.onclick = function(){
btn.onclick = null;
document.getElementById("myDiv").innerHTML = "Processing...";
}
</script>