2012-03-25 6 views
-5

I've found that all of these scripts, while doing the same thing create memory leaks ist die Frage, warum?Kreisreferenzen in IE6 Speicherlecks erstellen

Es scheint, dass es wegen der Zirkelverweise ist.

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

oder

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

oder

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

oder

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

Was haben Sie bisher entdeckt? – dldnh

+4

IE6? IE6 ?! ** IE6?!?! ** –

+0

Ich habe festgestellt, dass alle von ihnen tun. Aber ich weiß nicht warum. –

Antwort

0

Ich weiß nicht, wie Sie die Lecks erkennen, aber für mich nur die ersten 2 Beispiele Erstelle ein Leck. (erkannt mit sIEve)

Der Grund: innerhalb runme() erstellen Sie einen Abschluss für Knoten.

Wenn Sie Lecks in allen vier Beispielen erhalten, sollten Sie zeigen, wie Sie Knoten (das ist der Punkt, wenn das Leck occures) entfernen

Allerdings: Die Lösung ist Ereignisse zu entfernen, bevor ein Element zu entfernen: http://www.crockford.com/javascript/memory/leak.html