IE6中的循环引用会造成内存泄漏

时间:2012-03-25 11:53:00

标签: javascript internet-explorer memory-leaks

I've found that all of these scripts, while doing the same thing create memory leaks,问题是,为什么?

这似乎是因为循环引用。

<script>
function runme() {
  var node = document.createElement("div");
  node.onclick = function() {
    node.style.background = "red";
  }
  document.body.appendChild(node);
}
</script>

<script>
function runme() {
  var node = document.createElement("div");
  node.onclick = function() {}
  document.body.appendChild(node);
}
</script>

<script>
var node = document.createElement("div");
document.body.appendChild(node);
function runme() {
  node.onclick = function() {}
}
</script>

<script>
var node = document.createElement("div");
node.onclick = empty;
document.body.appendChild(node);
function empty() {
}
</script>

1 个答案:

答案 0 :(得分:0)

我不知道你是如何检测泄漏的,但对我来说,只有前两个例子会造成泄漏。(使用sIEve检测到)

原因:在runme()内部为节点创建一个闭包。

当您在所有4个示例中出现泄漏时,您应该显示如何删除节点(这是泄漏发生时的点)

但是:解决方案是在删除元素之前删除事件:http://www.crockford.com/javascript/memory/leak.html