【发布时间】:2013-01-06 13:47:30
【问题描述】:
我觉得得到这个输出很奇怪:
Wait..
Request 2 Complete.
Request 2 Complete.
关于一个简单的 for 循环:
for (var i = 0, j = urls.length; i < j; i += 1) {
$.ajax({
url: urls[i],
dataType: 'jsonp',
complete: function() {
log.append('Request ' + i + ' Complete.' + "\n");
if (i == (j - 1)) {
log.append('Done.');
}
}
});
}
为什么i 总是等于2?
【问题讨论】:
-
出现问题的原因是闭包关闭了变量 i,而不是创建闭包时的值。 JavaScript 以外的许多语言都会出现此问题,包括 C# 和 Visual Basic。如果您想了解有关此极其常见错误的更多背景信息,请搜索“访问修改后的闭包”。
标签: javascript jquery loops for-loop