Die else-Anweisung wird eine Funktion mit dem x-Wert der Rückkehr aus dem ersten Aufruf verkapselt
Um zu erklären, es wird es bricht nach unten ein wenig
var fresult = sum(3);
// right now fresult is a function that will add 3
// to the variable you call fresult with
// basically function(y){ return 3 + y; }
var result = fresult(4);
//result is 7
console.log(result);
Denken Sie daran, wie der Wert von x ist durch die Funktion erfasst werden, die zurückgegeben wird, die Sie dann
Diese Kapselung in der anonymen Funktion aufrufen, erstellt durch die Schließung erstellt wird in die Rückkehranweisung des anderen
Um mehr über Verschlüsse zu lernen, werfen Sie einen Blick auf this MDN Article about them, sie werden es viel besser erklären können, als ich könnte.
Sie haben tatsächlich ein Beispiel, das bei Ihnen sehr ähnlich ist, wo sie versuchen, das Konzept zu erklären, wie zu einer Fabrik ähnlich zu sein:
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
Artikel sagen:
In diesem Beispiel Wir haben eine Funktion makeAdder (x) definiert, die ein einzelnes Argument x annimmt und eine neue Funktion zurückgibt. Die Funktion gibt ein einzelnes Argument y zurück und gibt die Summe von x und y zurück.
Im Wesentlichen ist makeAdder eine Funktion Factory - es erstellt Funktionen , die ihren Argument einen bestimmten Wert hinzufügen können. Im obigen Beispiel verwenden wir unsere Funktionsfabrik, um zwei neue Funktionen zu erstellen - eine, die ihr Argument 5 hinzufügt, und eine, die 10 hinzufügt.
add5 und add10 sind beide Schließungen. Sie teilen sich die gleiche Funktion Körper Definition, aber speichern Sie verschiedene Umgebungen. In ADD5 Umgebung, x ist 5. Soweit ADD10 betrifft, x 10.
ist Also, wenn Sie zu einem eher traditionellen Programmiersprache Fällen einige Gebrauch verwendet werden, die Sie für private Variablen wäre hätte die Wie das Erfassen von Variablen Werten in einer Schließung
* "... Diese Funktion wird nicht mit einem '()' aufgerufen ..." * Es wird mit '()' aufgerufen. Es passiert einfach nach dem ersten '()'. 'sum (2) (3)' Das '(2)' ruft 'sum' auf, und das' (3) 'ruft alles auf, was von' sum (2) 'zurückgegeben wurde. –