为什么如下代码会打印 6 个 6??
let i = 0
for(i = 0; i<6; i++){
setTimeout(()=>{
console.log(i)
},0)
}
我的理解:因为setTimeout()方法,是一个定时器,就是当你把手上的事情干完之后,马上干另一间事情。如上代码中,每次到console.log(i)这一步时,都相当于设了个闹钟,放这了,我先把手头的for循环执行完,再来执行这个闹钟;而等这个for循环执行完之后,i 已经变成了6;此时有6个闹钟等着执行,就输入了六个六
让上面代码打印 0、1、2、3、4、5 的方法
由于JS在for和let一起用的时候会在每次循环多创建一个i,因此我们可以用for+let一起用的方法来打印0,1,2,3,4,5
for(let i = 0; i<6; i++){
setTimeout(()=>{
console.log(i)
},0)
}
其他打印 0、1、2、3、4、5 的方法
利用函数自执行的方式,把当前 for 循环过程中的 i 传递进去,构建出块级作用域
let i=0
for (i = 0; i < 10; i++) {
(i => {
setTimeout(() => {
console.log(i);
}, 1000)
})(i)
}