在初学使用 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)
}
复制代码
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END