众所周知,下面这种写法,输出都是 6个6,但是我们想依次输出012345怎么办呢,有三种办法
for (var i = 0; i < 6; i++) {
setTimeout(() => {
console.log(i)
}, 500*i)
}
第一种很简单就是把var改成let
第二种是使用闭包
for (var i = 0; i < 6; i++) {
(function (j) {
setTimeout(() => {
console.log(j)
}, 500*j)
})(i)
}
第三种不常见但是也很好用,就是setTimeout的第三个参数,是作为参数传过去的
for (var i = 0; i < 6; i++) {
setTimeout((j) => {
console.log(j)
}, 500*i, i)
}