Sto facendo riferimento a questo link sulle chiusure: link
Questo è specificamente su javascript. Nella seconda risposta con 956 voti, l'autore restituisce la funzione nidificata "sayAlert" dopo averla assegnata alla parola chiave var come mostrato di seguito. (Esempio 3)
function say667() {
// Local variable that ends up within closure
var num = 666;
var sayAlert = function() { alert(num); }
num++;
return sayAlert;
}
var sayNumber = say667();
sayNumber(); // alerts 667
Tuttavia nel prossimo esempio (Esempio 4), l'autore assegna le seguenti funzioni, "gAlertNumber", "gIncreaseNumber" e "gSetNumber", senza la parola chiave var. Quindi l'autore è in grado di chiamare le funzioni nidificate come segue.
function setupSomeGlobals() {
// Local variable that ends up within closure
var num = 666;
// Store some references to functions as global variables
gAlertNumber = function() { alert(num); }
gIncreaseNumber = function() { num++; }
gSetNumber = function(x) { num = x; }
}
setupSomeGlobals();
gIncreaseNumber();
gAlertNumber(); // 667
gSetNumber(5);
gAlertNumber(); // 5
var oldAlert = gAlertNumber;
setupSomeGlobals();
gAlertNumber(); // 666
oldAlert() // 5
Ho provato ad aggiungere la parola chiave var all'elemosina di ogni funzione nidificata, ma nella mia console restituisce un errore. Quindi presumo ci sia una differenza tra i due. Ma non so come si chiama questa tattica e perché funzioni ...