2012-03-25 22 views
-5

I've found that all of these scripts, while doing the same thing create memory leaks,問題是,爲什麼?在IE6中創建內存泄漏的循環引用

這似乎是因爲循環引用。

<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> 
+5

到目前爲止發現了什麼? – dldnh 2012-03-25 11:57:20

+4

IE6? IE6? ** IE6?!?** – 2012-03-25 12:09:15

+0

我發現他們都是。但我不知道爲什麼。 – 2012-03-25 12:17:34

回答

0

我不知道你是怎麼發現的泄漏,但對我來說只有第2個例造成泄漏(使用檢測到0)

原因是:在runme()中你創建了一個關閉節點

當你在所有4例有泄漏,你應該表現出,你如何刪除節點(這點當泄漏occures)

但是:該解決方案是移除元素之前刪除事件:http://www.crockford.com/javascript/memory/leak.html