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

标签 javascript

<分区>

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
之间的区别 但是现在我想以 1000 毫秒的间隔打印 0、1、2、3、4,并且没有使用 let 关键字,那我该怎么办呢?
我我想我可能需要使用闭包,但我不知道如何使用。
编辑:不使用 let 我的意思是使用 var 代替

最佳答案

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

关于javascript - 使用 setTimeout() 在 for 循环中“让”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56470538/

相关文章:

javascript - 查看Node.js String.prototype的方法?

javascript - hplot R 饼图的深入分析

javascript - 更改所选菜单的背景颜色

javascript - 为什么条件不执行?

javascript - API0005 从 Google Apps 脚本到 BitStamp API 的无效签名连接错误

javascript - inherit.js 中的奇怪正则表达式(John Resig 着)——为什么、什么以及如何?

javascript - 网页设计的流动性

javascript - ReactJS + react 路由器 : How to reference a specific object to pass down as properties?

javascript相关的调试工具或库?

JavaScript:针对不同情况压缩对象分配