In meinem naiven Konzept, ist ein Verschluss einfach eine Funktion Rückkehr durch eine andere Funktion, die den Umfang der äußeren Funktion bewahren, nachdem sie zurück:Was ist die Bedingung, um eine Schließung zu schaffen?
var factory = function(y){
var x = 2;
return function(){
console.log(x+y);
}
}
var closure1 = factory(2);
closure1(); // output 4
var closure2 = factory(10);
closure1(); // output 4
closure2(); // output 12
Obwohl ich verstehe nicht, warum das Hinzufügen Event-Handler in Schleife wird Schließungen erstellen? (Wie in MDN gezeigt) Der Event-Handler wird nicht explizit zurückgegeben, dies ist nicht das Problem in diesem Problem.
Dann stieß ich auf eine anderen page, und bei etwa Code-Snippet # 2:, sagte, es
Die Onclick-Funktion einen Verschluss schaffen würde, wenn es Variablen in ihrem Umfang Bezug genommen wird, aber es nicht.
Bedeutet dies, dass in der Schleife
nodes[i].onclick = function() { return false; };
nicht Schließungen ist
Aber wenn ich es in
geändertnodes[i].onclick = function() { console.log(i); return false; };
Dann wird es Schließung?
die Teile über Combined, mein Konzept einen Verschluss
zu erstellen ist- Es braucht eine Funktion in einer anderen Funktion zurückgegeben werden, oder die Callback-Funktion, die in einer anderen Funktion angebracht
- die Innen Funktion MUST irgendwie Umfang äußere Funktion zugreifen
ist es wahr, dass ein Verschluss iff 1 erstellt wird & 2 sind zufrieden?