【发布时间】:2018-04-26 16:51:13
【问题描述】:
全部:
当我尝试学习 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,为什么可以这样解决?
谢谢
【问题讨论】:
-
@ibrahimmahrir 感谢您的回复。我想我有点困惑。我想问的是为什么该解决方案有效,而不是为什么这是内存泄漏
-
@ibrahimmahrir 你能谈谈这个具体例子中导致循环引用的原因吗?我真的很难理解为什么这是一个循环参考
-
kuan 其实我认为我对那个循环引用是错误的。在这个例子中似乎没有一个,就像在你的另一个问题中一样。
-
@ibrahimmahrir 感谢您清除我的想法。这种识别东西的内存泄漏让我丧命。
标签: javascript dom memory-management