我们说我有当前的代码:
for(var n = 0; n != 5;n++){
alert(i);
}
它会提示0,1,2,3,4
虽然现在让我说我需要执行一个具有返回功能的异步函数,你可以将其作为参数传递。
for(var n = 0; n != 5;n++){
doAsync(function(){alert(n);});
}
function doAsync(func){
setTimeout(func, 1000);
}
这将提醒" 5",5次。有没有办法让n变量保持与循环中相同?我的意思是我喜欢它执行0,1,2,3,4。
谢谢,我感谢所有人的帮助。
答案 0 :(得分:2)
这是典型的关闭问题。
您可以按以下方式更改代码
for (var n = 0; n != 5; n++) {
alert(n);
}
for (var n = 0; n != 5; n++) {
doAsync(function(n) {
alert(n);
}.bind(null,n));
}
function doAsync(func) {
setTimeout(func, 1000);
}
希望这有帮助
答案 1 :(得分:2)
选项1:
for (var n = 0; n != 5; n++) {
(function(x) {
setTimeout(function() {
alert(x);
}, 1000);
})(n);
}

选项2:
for (var n = 0; n != 5; n++) {
(function(x) {
doAsync(function() {
alert(x);
});
})(n);
}
function doAsync(func) {
setTimeout(func, 1000);
}