Hallo,
Und hier ein Frage, es gibt ja diesen ewig langen Thread bei Quirksmode wegen addEvent (http://www.quirksmode.org/blog/archives/2005/10/_and_the_winner_1.html), dort wird ja auch von Speicherlöchern im zusammenhang mit dem IE und closures (bzw. anonymen Funktionen) gesprochen. Ich bin dem ganzen nicht 100% nachgegangen, aber wenn ich das richtig verstanden habe (kann sein dass ich es nicht habe) hat der IE Probleme solche Variabeln wieder frei zu geben, oder trifft das nur unter manchen Umständen zu?
Es gibt wohl einige Szenarien (siehe meine Linksammlung, insbesondere den Microsoft-Artikel), aber besonders häufig sind Memory-Leaks aufgrund von kreisförmigen Referenzen im Zusammenhang mit Event-Handling.
Memory Leaks treten wohl quasi immer auf, wenn man ein solches Schema hat:
function func () {
...
var element = document.getElementById("xyz");
...
element.onevent = function () {}; // Closure, schließt »element« ein
...
}
Der DOM-Elementknoten in element hat eine Eigenschaft onevent mit einer Function, in deren Scope die Variable element »eingeschlossen« ist, welche wiederum auf den Elementknoten zeigt. Ein solcher zirkulärer Verweis führt zu Memory-Leaks. IE räumt diese beteiligten Objekte nicht ordnungsgemäß aus dem Speicher, deshalb muss man den Verweis von Hand beim onunload löschen. Dasselbe gilt bei der Verwendung von addEvent.
Mathias