setTimeout无法按预期工作

时间:2015-12-10 21:28:24

标签: javascript

我正在用Javascript编写for循环。期望的目标是打印出0,1,2,中间有3秒的间隙。

for (var i=0; i<3; i++) {
    console.log(i);
}

按预期打印所有内容,没有暂停。但是当我添加一个setTimeout时:

for (var i=0; i<3; i++) {
    setTimeout(function() {console.log{i},3000*i}
}

结果是它打印出333,间隔为3秒。暂停工作,但它看起来像是在正确的数字打印之前完成循环。

1 个答案:

答案 0 :(得分:4)

setTimeout调用运行之前完成循环是完全正确的。由于所有超时功能都引用i,因此它们都打印出3。解决此问题的方法是在闭包中捕获i

for (var i = 0; i < 3; i++) {
  (function(index) {
    setTimeout(function() {
      console.log(index);
    }, 3000 * index);
  })(i); // Instantly call the function and pass the value of i
}