L'istruzione else sta tornando una funzione con il valore x incapsulato dal primo invito
Per spiegarlo sarà scomposizione un po '
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);
Pensate a come il valore di x è essere catturato dalla funzione che viene restituito, che è quindi possibile chiamare
Questo incapsulamento viene creato dalla chiusura creato nella funzione anonima in dichiarazione di restituzione dell'altro
Per ulteriori informazioni sulle chiusure, dare un'occhiata a this MDN Article about them, sarà in grado di spiegarlo molto meglio di quanto avrei potuto.
in realtà hanno un esempio che è molto simile al tuo, dove cercano di spiegare il concetto come simile ad una fabbrica:
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
articolo dice:
In questo esempio, abbiamo definito una funzione makeAdder (x) che prende un singolo argomento xe restituisce una nuova funzione. La funzione restituita accetta un singolo argomento y e restituisce la somma di x e y.
In pratica, makeAdder è una fabbrica di funzioni: crea funzioni che possono aggiungere un valore specifico al loro argomento. Nell'esempio sopra riportato usiamo la nostra factory di funzioni per creare due nuove funzioni - una che aggiunge 5 al suo argomento e una che aggiunge 10.
add5 e add10 sono entrambe le chiusure. Condivono la stessa definizione del corpo della funzione , ma memorizzano diversi ambienti. Nell'ambiente di ADD5, x è di 5. Per quanto riguarda l'Add10 è interessato, è x 10.
Così se siete abituati a un linguaggio di programmazione più tradizionale alcuni casi d'uso che si avrebbe per le variabili private sarebbe il come catturare valori di variabili in una chiusura
* "... Quella funzione non viene chiamata con un '()' ..." * Viene chiamata con '()'. Succede semplicemente di essere dopo il primo '()'. 'sum (2) (3)' Il '(2)' richiama 'sum', e' (3) 'invoca qualsiasi cosa sia stato restituito da' sum (2) '. –