molily: Closures

Beitrag lesen

Hallo,

Zu dem Zeitpunkt, wenn drawAxes() ausgeführt wird, wurde doch der Konstruktor schon wieder verlassen also sollten doch auch die normalen lokalen Variablen des Konstruktors nicht mehr existieren.

Genau das ist nicht der Fall: Die lokalen Variablen des Konstruktors existieren noch, weil du eine sogenannte Closure gebildet hast. Du hast in der Konstruktorfunktion eine weitere Funktion notiert, sie also verschachtelt. Die innere Funktion wirkt daher als Closure. Sie schließt die lokalen Variablen der äußeren Funktion ein und hat auch *nach* deren Ausführung weiterhin Zugriff auf deren Variablen.

http://aktuell.de.selfhtml.org/artikel/javascript/organisation/#closures

Wenn sie was doch tuen, bräuchte ich in dem Fall ja keine Membervaribalen und kann die lokalen Variablen des Konstruktors als 'private' Member benutzen.

Richtig. So und nicht anders werden »private« Eigenschaften in JavaScript gelöst.

Habs gerade mal ausprobiert und this.jg_doc = new  durch var jg_doc = ... ersetzt. Dann könnte ich das this vor jg_doc in der Memberfunktion weglassen.

Ja.

Wieso werden die Variablen nach Verlassen des Konstruktors gespeichert und stehen beim Einsprung in die Memberfunktion wieder zur Verfügung?

Wegen Closures.

Mathias