Hallo!
Nicht ohne Grund haben solche Closures in älteren Browsern Memory-Leaks ausgelöst.
Was heißt nicht ohne Grund? Entweder sind es echte Zirkelreferenzen, die kann der Browser nicht auflösen, oder Bugs, z.B. dass beim entfernen des Elementes der Eventhandler nicht dereferenziert werden. Da gab (vor allem beim IE) und gibt es sicher welche.
Das Problem ist m.W., dass die tatsächlichen DOM-Objekte der in C++ implementierten Speicherverwaltung unterliegen, während JavaScript-Objekte der Garbage Collection der JavaScript-Engine unterliegen. Das sind ursprünglich zwei Systeme, die durch das DOM verbunden sind. Umso mehr, wenn Eigenschaften oder Variablen auf DOM-Objekte verweisen oder JavaScript-Objekte an DOM-Objekte gehängt werden.
Diese Verwirrung aufzulösen scheint immer noch ein Problem zu sein. Deshalb ist eine Architektur-Idee von Blink: Experiment with moving the DOM into the JS heap. Damit gäbe es keine Verdoppelung der DOM-Objekte und die GC der JS-Engine könnte eigenmächtig DOM-Objekte aus dem Speicher räumen.
Grüße,
Mathias