Ich habe einen guten Griff auf Verschlüsse konzeptionell, aber ein Problem ist entstanden, das ich nicht ganz verstehen kann.Verständnis der anonymen JavaScript Funktionsdefinition in Bezug auf Verschlüsse
Wenn Sie eine Funktion zu schaffen einen gewissen Wert auf eine innere Funktion zu übergeben, ohne sie auf die äußerste Funktion der Endwert verbindlich, wenn sie zurückkommt, nicht erlaubt, dies zu sein scheint:
function buildList(list) {
var result = [];
for (var i = 0; i < list.length; i++) {
function (x) { // this anonymous function definition...
var item = 'item' + list[x];
result.push(
return function() {
console.log(item + ' ' + list[x]);
};
);
}(i); // and simultaneous invocation...
}
return result;
}
Während, wenn ich mich bewege die Verschluss vollständig innerhalb des Anrufs .push(), funktioniert alles einwandfrei aus:
function buildList(list) {
var result = [];
for (var i = 0; i < list.length; i++) {
result.push(
function (x) { // wrapper now inside the call to .push()
var item = 'item' + list[x];
return function() {
console.log(item + ' ' + list[x]);
};
}(i) // and called here...
);
}
return result;
}
Was ich frage mich: Was Regel bin ich, wenn ich zu verletzen definieren die anonyme Funktion, die die Schließung unmittelbar innerhalb der for-Schleife wickelt im Gegensatz zu dem Aufruf von .push() ?
'result.push (Return-Funktion ...' wird nie funktionieren, und es ist nicht von der Schließung zu tun,. Rückkehr ist eine Aussage, und Aussagen sind nichtig, so auch wenn es didn 't werfen für syntax, du wärst push() ing nichts. du kannst auch kein ending semi in einem push() haben, also gibt es ein paar probleme mit dem 1. code ... – dandavis
Was macht "* das nicht 't scheint erlaubt sein * "bedeuten? – Amit
Definieren *" funktioniert gut "*. Wie ist Ihr erwartetes Verhalten? Wie ist es in jedem Fall anders? –