Was sind Closures?

Closures bestimmen, welche Variablen einer inneren Funktion zugänglich sind.

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 in simple words:

Closures sind Funktionen mit konservierten Werten.

Wie wir Closures einsetzen können


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.

Closures haben Zugriff auf: