Erläuterung der praktischen Verwendung eines Abschlusses in JavaScript
Wenn wir eine Funktion innerhalb einer anderen Funktion erstellen, schaffen wir eine Schließung. Closures sind sehr leistungsfähig, da sie die Daten ihrer äußeren Funktionen lesen und manipulieren können. Jedes Mal, wenn eine Funktion aufgerufen wird, wird ein neuer Bereich für diesen Aufruf erstellt. Die innerhalb der Funktion deklarierten lokalen Variablen gehören zu diesem Bereich und können nur von dieser Funktion aus aufgerufen werden. Wenn die Funktion ihre Ausführung beendet hat, wird der Bereich normalerweise zerstört.
Ein einfaches Beispiel für eine solche Funktion ist die folgende:
function buildName(name) {
const greeting = "Hello, " + name;
return greeting;
}
Im obigen Beispiel deklariert die Funktion buildName() eine lokale Variable greeting und gibt sie zurück. Jeder Funktionsaufruf erzeugt einen neuen Bereich mit einer neuen lokalen Variablen. Nachdem die Funktion ausgeführt wurde, gibt es keine Möglichkeit mehr, auf diesen Bereich zu verweisen, also wird er in den Müll geworfen.
Aber was ist, wenn wir eine Verbindung zu diesem Bereich haben?
Schauen wir uns die nächste Funktion an:
function buildName(name) {
const greeting = "Hello, " + name + " Welcome ";
const sayName = function() {
console.log(greeting);
};
return sayName;
}
const sayMyName = buildName("Mandeep");
sayMyName(); // Hello, Mandeep Welcome
Die Funktion sayName() aus diesem Beispiel ist eine Schließung. Die Funktion sayName() hat ihren eigenen lokalen Bereich (mit der Variable welcome) und hat auch Zugriff auf den Bereich der äußeren (umschließenden) Funktion. In diesem Fall ist das die Variable greeting aus buildName().
Nachdem die Ausführung von buildName abgeschlossen ist, wird der Bereich in diesem Fall nicht zerstört. Die Funktion sayMyName() hat immer noch Zugriff auf ihn, so dass er nicht gelöscht wird. Es gibt jedoch keine andere Möglichkeit, auf Daten aus dem äußeren Bereich zuzugreifen, außer der Schließung. Die Closure dient als Gateway zwischen dem globalen Kontext und dem äußeren Bereich.