最近、forループで延期されたjqueryの動作について質問しました。ここにリンク
実用的な回答を受け取りましたが、なぜそれが機能するのかわかりません。
次のコードがある場合:
function update(callbacks) {
return $.Deferred(function(dfr) {
setTimeout(function() {
callbacks.success()
}, 1000);
dfr.resolve();
}).promise();
}
function updateElements(deferreds) {
for (var i = 0; i < 5; i++) {
(function() {
var index = i;
deferreds.push(update({
success: function() {
alert(index);
}
}));
})();
}
};
(function() {
var deffereds = [];
updateElements(deffereds);
$.when.apply($, deffereds).then(function() {}, function() {});
})();
0から4までの値を持つ5つのアラートウィンドウを返します。updateElementsメソッドを次のように変更した場合:
function updateElements(deferreds) {
for (var i = 0; i < 5; i++) {
var index = i;
deferreds.push(update({
success: function() {
alert(index);
}
}));
}
};
値が4のみの5つのアラートウィンドウを返します。誰かがこの行動を説明してもらえますか?違いがどこから来るのか理解するのに苦労しています。
ありがとう!