我最近问了一个关于在 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() {});
})();
它返回 5 个警报窗口,其值从 0 到 4。如果我将 updateElements 方法更改为:
function updateElements(deferreds) {
for (var i = 0; i < 5; i++) {
var index = i;
deferreds.push(update({
success: function() {
alert(index);
}
}));
}
};
它返回 5 个警报窗口,其值仅为 4。有人可以解释这种行为吗?我正在努力理解差异来自哪里。
谢谢!