Vengo da uno sfondo di Actionscript e (molto tardi alla festa) Sto cercando di imparare JavaScript. Sto passando per questo AngularJS - Video Tutorial For Beginners su YouTube (è abbastanza buono) e ho visto qualcosa di veramente semplice che non capisco.Ambito all'interno di una funzione anonima?
Alla riga 5 è definito lo var workcount
. Quindi due funzioni anonime sono definite e restituite in un oggetto. Le funzioni si riferiscono a workcount
ma non sono workcount
in un ambito diverso? È simile a blocks
in Objective-C in cui le vars locali rimangono accessibili all'interno del blocco. C'è un nome per quello che è?
O se una funzione "conosce" Vars precedentemente definito nel suo campo di applicazione, avrebbe la funzione task2
"sapere" task1
?
Mi dà fastidio che non riesca a dare un senso a questo.
Aggiornamento: Grazie per tutte le risposte. Ora capisco - e anche se ho visto il termine "chiusure" prima, non l'ho mai capito (sembra un termine non molto descrittivo. Nel leggere, ho visto il termine "stack-frame" e poi la lampadina accesa : stack ... frame of reference);
var createWorker = function(){
var workCount = 0;
var task1 = function(){
workCount += 1;
console.log("task1" , workCount);
};
var task2 = function(){
workCount += 1;
console.log("task2" , workCount);
};
return {
job1: task1,
job2:task2
}
};
worker=createWorker();
worker.job1();
worker.job2();
uscita:
task1 1
task2 2
Se pubblichi immagini, assicurati che lo stesso contenuto sia disponibile come testo (che ovvi all'uso delle immagini). Non tutti possono vedere immagini allegate. – RobG
Questo sembra essere un semplice caso di non comprensione delle chiusure, vedere [* MDN: Chiusure *] (https://developer.mozilla.org/en/docs/Web/JavaScript/Closures) e [* SO: Come fare JavaScript chiusure funzionano? *] (http://stackoverflow.com/questions/111102/how-do-javascript-closures-work?rq=1). – RobG