Andersherum aber doch auch, wenn man DOM Referenzen in JavaScript-Objekten speichert, verhindert man, daß die Elemente abgebaut werden
Klar, das stimmt. Aber man ist es eher gewöhnt, im JavaScript-Land aufzuräumen. Das JavaScript-Land ist übersichtlicher und einfacher zu verwalten – ein Objekt steckt im dafür vorgesehenen globalen Speicher window.MeinWidget.instances oder nicht. Es gibt natürlich fiese Fallstricke wie Closures, die Objekte einschließen, die sonst nicht ausgehend vom globalen Objekt erreichbar sind.
Dass man die Referenzen im DOM-Land genauso aufräumen muss, ist noch nicht so breit bekannt. Das DOM-Land ist groß und unübersichtlich, man hat gerne tausende tief verschachtelte Elemente. Es gibt viele Möglichkeiten, versteckt auf Objekte zu verweisen. Event-Handler z.B. sind fies, sie verknüpfen DOM-Knoten mit Funktionen, die häufig größere Objekte einschließen. Nicht ohne Grund haben solche Closures in älteren Browsern Memory-Leaks ausgelöst.
Ganz ohne beidseitige Referenzen zwischen JavaScript und DOM kommt man nicht aus, aber ich würde versuchen sie zu minimieren. jQuery und andere Bibliotheken bieten mit .data() die Möglichkeit, Objekte/Werte mit DOM-Elementen zu verknüpfen. Dabei wird aus guten Gründen keine direkte Objektreferenz erzeugt, sondern nur ein GUID am Element gespeichert (ein winziger String). Die Nutzdaten selbst werden in einem JavaScript-Hash gespeichert.
Mathias