使用setTimeout()在for循环中“让”

时间:2019-06-06 03:25:39

标签: javascript

let timer = () => {
  for(let i = 0; i < 5; i ++) {
    setTimeout(() => {
      console.log(i)
    }, i * 1000)
  }
}
timer();
上面的

代码将以1000ms的间隔打印0、1、2、3、4
并且如果将let i = 0更改为var i = 0timer()将以1000ms的间隔五次推入“ 5”。到目前为止一切顺利,我知道letvar之间的区别
但是现在我想以1000ms的间隔打印0、1、2、3、4,并且不使用 let关键字,那我该怎么办?
我想我可以需要使用闭包,但我不知道如何。
编辑:通过不使用,我的意思是使用var

1 个答案:

答案 0 :(得分:0)

如果您不能使用let,则可以始终使用Immediately Invoked Function Expression

let timer = () => {
  for (var i = 0; i < 5; i++) {
    (i => {
      setTimeout(() => {
        console.log(i)
      }, i * 1000)
    })(i)
  }
}
timer();

如果您想使代码与ES5兼容,则还必须将箭头功能转换为普通功能:

var timer = function () {
  for (var i = 0; i < 5; i++) {
    (function (i) {
      setTimeout(function () {
        console.log(i);
      }, i * 1000);
    })(i);
  }
}
timer();