Start / Blog

Blog

Closures: Was eine Funktion sich merkt

Closures gelten als eines der Themen, an denen JavaScript-Einsteiger hängen bleiben. Dabei ist die Sache erstaunlich handfest — man muss sie nur einmal an etwas sehen, das man tatsächlich baut.

Funktionen sind Werte

Der Ausgangspunkt ist unspektakulär: Eine Funktion lässt sich einer Variablen zuweisen, weitergeben und zurückgeben. Genau das ist der Unterschied zwischen einer Funktionsdeklaration und einem Funktionsausdruck — die eine wird gehoistet und ist vor ihrer Zeile aufrufbar, der andere folgt den ganz normalen Regeln von const und let.

Der Wert überlebt seine Funktion

Eine Closure entsteht, wenn eine Funktion sich Werte aus dem Bereich merkt, in dem sie erzeugt wurde. Schreibst du eine Funktion, die eine Prüffunktion zurückgibt, und übergibst ihr einen Grenzwert, dann trägt jede erzeugte Prüffunktion ihren eigenen Grenzwert mit sich — dauerhaft.

Das überrascht beim ersten Mal: Die äußere Funktion ist längst beendet, ihre Variable müsste weg sein. Ist sie aber nicht. Zwei Funktionen aus derselben Vorlage liefern deshalb für dieselbe Eingabe unterschiedliche, jeweils korrekte Antworten. Konfiguration einmal beim Erzeugen übergeben statt bei jedem Aufruf — das ist der praktische Nutzen.

Wer var benutzt, verliert die Grenzen

Der häufigste Stolperstein liegt eine Ebene tiefer, beim Gültigkeitsbereich. var kennt nur Funktionsbereiche, keine Blöcke — wer damit arbeitet, wundert sich über Werte, die aus einer Schleife herauslecken. let und const halten sich an die geschweiften Klammern, und damit wird auch nachvollziehbar, was eine Closure eigentlich einfängt.

Mehr dazu im Seminar

Von der ersten Funktion über Pfeilfunktionen bis zu Closures mit gemerkter Konfiguration führt das Modul Funktionen, Gültigkeitsbereiche und Closures — mit Video und Kapitelübersicht.

Zum Seminar JavaScript Grundlagen & Modernes ECMAScript

← Alle Beiträge