Die in der Closure definierte Funktion merkt sich die Umgebung, in der sie erzeugt wurde.
In einfachen Worten ist eine Closure nichts anderes als eine Funktion (inner function), die in einer anderen Funktion definiert ist. Die Closure hat Zugriff auf alle lokalen Variablen, ihre externen Funktionsvariablen und globalen Variablen. Sie ist eine Funktion, die mit ihrer lexikalischen Umgebung gebündelt ist.
Closures sind Funktionen mit konservierten Werten.
Closures anstelle von Objekten: Funktionen mit Kontext erstellen
Wir können ganz einfach eine Closure erstellen, bei der alle
allgemeinen Felder von der äußeren Funktion festgelegt werden und die
innere Funktion nur die eindeutigen Felder verwendet.
einigen Fällen sehr nützlich sein, z.B. wenn wir mehrere Funktionen
benötigen, die in unterschiedlichen Kontexten etwas Ähnliches tun.
Anstatt für jede Aktion eine eigene Funktion zu erstellen, erstellen
wir eine äußere Funktion und mehrere innere Funktionen. Diese innere
Funktionen "returnen" wir dann an die übergeordnete Funktion zurück.
Hinweis: Return-Funktionen sind nichts anderes als Closures.
Private Attribute erstellen ("let" anstelle von "this")
Sprachen wie Java geben uns die Möglichkeit, bestimmte Attribute
(Eigenschaften) als "private" zu deklarieren. Dies ist bei JavaScript
(oder Python) nicht der Fall. Aber wir können dies, wie im folgenden Beispiel zu sehen ist,
erzwingen:
Eine Pflanzen-Funktion gibt ein Objekt mit Funktionen
zurück, die von außerhalb der Pflanzen-Funktion zugänglich sind. Dies
ist über die Punktnotation ( plant.grow()) möglich. Neben diesen
Funktionen hat das Objekt aber zwei Attribute, die es nicht über
"return" ausgibt - deshalb bleiben diese außerhalb der Funktion Pflanze
unzugänglich.
Ebenfalls sind die mit "let" statt "this." gekennzeichnete Variablen nur im lokalen Scope der inneren Funktion verfügbar und dadurch "private" geworden.