对于循环,保持变量

时间:2016-12-24 22:52:31

标签: javascript for-loop asynchronous

我们说我有当前的代码:

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。

谢谢,我感谢所有人的帮助。

2 个答案:

答案 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);
}