全部:
当我尝试遵循 JS DOM 内存泄漏教程时,有一个关于 OLD IE(7, 8) 的内存泄漏示例:
<div id="myDiv">
<button id="myBtn">Click Me</button>
</div>
<script type="text/javascript">
var btn = document.getElementById("myBtn");
btn.onclick = function(){
document.getElementById("myDiv").innerHTML = "Processing...";
}
</script>
它给出的解决方案是:
<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>
我在这里感到困惑:
- 泄漏是什么:myBtn DOM对象还是onclick函数?(我的理解:它试图说DOM,因为innerHTML试图用文本节点替换整个按钮节点)
- 如果 DOM 泄漏,那么
btn
变量仍然引用 DOM,导致无法 GC,为什么可以解决这个问题?
谢谢
最佳答案
两种情况都存在泄漏。您必须释放指向 DOM 对象的 btn
变量和 onclick
事件才能停止监听该事件。
关于javascript - 这个解决方案是否正确处理 DOM 内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50048315/