Auch wenn es im Internet viele schöne Definitionen von JavaScript-Schließungen gibt, versuche ich, meinem sechsjährigen Freund meine Lieblingsdefinitionen von Schließungen zu erklären, die mir geholfen haben, die Schließung viel besser zu verstehen.
Was ist eine Schließung?
Eine Closure ist eine innere Funktion, die Zugriff auf die Variablen-Umfangskette der äußeren (einschließenden) Funktion hat. Die Closure hat drei Scope-Ketten: Sie hat Zugriff auf ihren eigenen Scope (Variablen, die zwischen ihren geschweiften Klammern definiert sind), sie hat Zugriff auf die Variablen der äußeren Funktion und sie hat Zugriff auf die globalen Variablen.
Eine Closure ist die lokale Variable für eine Funktion, die auch nach der Rückkehr der Funktion erhalten bleibt.
Closures sind Funktionen, die sich auf unabhängige (freie) Variablen beziehen. Mit anderen Worten: Die in der Closure definierte Funktion "merkt" sich die Umgebung, in der sie erstellt wurde.
Closures sind eine Erweiterung des Konzepts des Geltungsbereichs. Mit Closures haben Funktionen Zugriff auf Variablen, die in dem Bereich verfügbar waren, in dem die Funktion erstellt wurde.
Eine Schließung ist ein Stack-Frame, der nicht freigegeben wird, wenn die Funktion zurückkehrt. (Als ob ein "Stack-Frame" nicht auf dem Stack, sondern in einer Malloc-Datei liegen würde!)
Sprachen wie Java bieten die Möglichkeit, Methoden als privat zu deklarieren, was bedeutet, dass sie nur von anderen Methoden der gleichen Klasse aufgerufen werden können. JavaScript bietet keine native Möglichkeit, dies zu tun, aber es ist möglich, private Methoden mit Closures zu emulieren.
Ein "Abschluss" ist ein Ausdruck (in der Regel eine Funktion), der freie Variablen zusammen mit einer Umgebung haben kann, die diese Variablen bindet (die den Ausdruck "abschließt").
Closures sind ein Abstraktionsmechanismus, der es Ihnen ermöglicht, Anliegen sehr sauber zu trennen.
Verwendungszwecke von Verschlüssen:
Closures sind nützlich, wenn es darum geht, die Implementierung von Funktionen zu verbergen und gleichzeitig die Schnittstelle zu offenbaren.
Sie können das Kapselungskonzept in JavaScript mit Closures nachbilden.
Verschlüsse werden in großem Umfang verwendet in jQuery y Node.js .
Während Objektliterale sicherlich einfach zu erstellen und praktisch für die Speicherung von Daten sind, sind Closures oft die bessere Wahl für die Erstellung statischer Singleton-Namespaces in einer großen Webanwendung.
Beispiel für Verschlüsse:
Da ich davon ausgehe, dass mein 6-jähriger Freund erst vor kurzem in der Grundschule mit der Addition vertraut gemacht wurde, hielt ich dieses Beispiel der Addition zweier Zahlen für das einfachste und geeignetste, um den Abschluss zu lernen.
Beispiel 1: Der Abschluss wird hier durch die Rückgabe einer Funktion erreicht.
function makeAdder(x) {
return function(y) {
return x + y;
};
}
var add5 = makeAdder(5);
var add10 = makeAdder(10);
console.log(add5(2)); // 7
console.log(add10(2)); // 12
Beispiel 2: Der Abschluss wird hier durch die Rückgabe eines Objektliterales erreicht.
function makeAdder(x) {
return {
add: function(y){
return x + y;
}
}
}
var add5 = makeAdder(5);
console.log(add5.add(2));//7
var add10 = makeAdder(10);
console.log(add10.add(2));//12
Beispiel 3: Schließungen in jQuery
$(function(){
var name="Closure is easy";
$('div').click(function(){
$('p').text(name);
});
});
Nützliche Links:
Vielen Dank für die oben genannten Links, die mir helfen, den Abschluss besser zu verstehen und zu erklären.