一、打印出6个6
let i = 0
for(i = 0; i<6; i++){
setTimeout(()=>{
console.log(i)
},0)
}
把i声明在for循环外面,并且用setTimeout的时候,会打印出6个6,而不0,1,2,3,4,5
这是因为,setTimeout函数是过段时间执行的意思。setTimeout的代码会最后执行,循环过程中i从0到6,一共执行了六次
二、打印出0,1,2,3,4,5的方法
方法一、用let在for循环里面声明变量(最优解)
for(let i = 0; i<6; i++){
setTimeout(()=>{
console.log(i)
},0)
}
把变量声明在for循环里面就可以;js自己在let和for一起使用的时候加了东西,每次循环都会创建一个i。let会生成一个局部作用域
方法二、用立即执行函数
for (var i = 0; i< 6; i++){
! function (i){
setTimeout(() => {
console.log(i)
},0);
}(i)
}
方法三、setTimeout调用每次循环完i的值
for (var i = 0; i< 6; i++){
setTimeout((i) => {
console.log(i)
}, 0,i);
}