Diese Antwort ist eine Zusammenfassung dieses Youtube-Videos Javascript-Schließungen . Also volle Anerkennung für dieses Video.
Closures sind nichts anderes als Stateful-Funktionen, die den Zustand ihrer privaten Variablen beibehalten.
Normalerweise rufen Sie eine Funktion auf, wie in der folgenden Abbildung gezeigt. Die Variablen werden auf einem Stack (laufender RAM-Speicher) erstellt, verwendet und dann wieder freigegeben.
Aber jetzt gibt es Situationen, in denen wir diesen Zustand der Funktion beibehalten wollen, dass ist, wo Javascript Schließungen zum Einsatz kommt. Ein Closure ist eine Funktion innerhalb einer Funktion mit einem Rückruf, wie im folgenden Code gezeigt.
Der Schließungscode für die obige Zählerfunktion sieht also etwa so aus wie unten dargestellt: eine Funktion innerhalb einer Funktion mit einer Rückgabeanweisung.
function Counter() {
var counter = 0;
var Increment = function () {
counter++;
alert(counter);
}
return {
Increment
}
}
Wenn Sie nun einen Aufruf tätigen, wird der Zähler erhöht, d. h. der Funktionsaufruf behält den Status bei.
var x = Counter(); // get the reference of the closure
x.Increment(); // Displays 1
x.Increment(); // Display 2 ( Maintains the private variables)
Nun stellt sich aber die große Frage nach dem Nutzen einer solchen zustandsabhängigen Funktion. Zustandsabhängige Funktionen sind Bausteine zur Implementierung von OOP-Konzepten wie Abstraktion, Kapselung und Erstellung von eigenständigen Modulen.
Was immer Sie also gekapselt haben wollen, können Sie als privat kennzeichnen, und Dinge, die der Öffentlichkeit zugänglich gemacht werden sollen, sollten in die Return-Anweisung aufgenommen werden. Außerdem sind diese Komponenten in sich geschlossene, isolierte Objekte, so dass sie globale Variablen nicht verschmutzen.
Ein Objekt, das den OOP-Prinzipien folgt, ist in sich geschlossen, folgt der Abstraktion, folgt der Kapselung und so weiter. Ohne Closures in Javascript ist dies schwer zu implementieren.