【问题标题】:'let' in for loop with setTimeout() [duplicate]使用 setTimeout() 在 for 循环中“让”[重复]
【发布时间】:2019-10-21 13:22:32
【问题描述】:
let timer = () => {
  for(let i = 0; i < 5; i ++) {
    setTimeout(() => {
      console.log(i)
    }, i * 1000)
  }
}
timer();

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

【问题讨论】:

  • 如果不是letvar...您是否尝试使用const?我想我不确定不使用let 的目标是什么。
  • @stealththeninja 可能是为了避免使用 ES6+
  • @stealththeninja 我的意思是使用var
  • Another way 使用递归且没有同时超时。

标签: javascript


【解决方案1】:

如果您不能使用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();

【讨论】:

    猜你喜欢
    • 2016-08-30
    • 2010-12-19
    • 2014-05-18
    • 1970-01-01
    • 2015-04-26
    • 1970-01-01
    • 1970-01-01
    • 2013-10-13
    相关资源
    最近更新 更多