阅读 680

如何解决 var 在 for 循环中的问题

在初学使用 for 循环的时候,大家都会遇到下面这种情况。

问题复现

for (var i = 1; i <= 5; i++) {
  setTimeout(function timer() {
    console.log(i)
  }, i * 1000)
}
复制代码

预期效果: 1 2 3 4 5

打印结果: 6 6 6 6 6

解决方式

闭包

for (var i = 1; i <= 5; i++) {
    (function (j) {
        setTimeout(function timer() {
            console.log(j)
        }, j * 1000)
    })(i)
}
复制代码

setTimeout 第三参数

for (var i = 1; i <= 5; i++) {
   setTimeout(
       function timer(j) {
           console.log(j)
       },
       i * 1000,
       i
   )
}
复制代码

使用 let 定义 i

for (let i = 1; i <= 5; i++) {
    setTimeout(function timer() {
        console.log(i)
    }, i * 1000)
}
复制代码
文章分类
前端
文章标签