J函数的执行机制
let i = 0
for(i = 0; i<6; i++){
setTimeout(()=>{
console.log(i)
},0)
}
为什么打印出6个6
分析
声明变量i i=0 然后执行for循环,判断i是否小于6,否则i++ 循环体中setTimeout是指定多长时间后执行函数 setTimeout会在循环结束后执行,当i=6 时候循环结束 因为for循环中,循环了六次,循环了六次的setTimeout setTimeout在循环结束后执行,循环了六次所有打印出6个6
解决方法
方法1
//把let这个写在for循环中
//let允许你声明一个作用域被限制在 块级中的变量、语句或者表达式。与 var 关键字不同的是, var声明的变量只能是全局或者整个函数块的。
for(let i = 0; i<6; i++){
setTimeout(()=>{
console.log(i)
},0)
}
方法2
let i = 0
for (i = 0; i < 6; i++) {
function agg(i) {
setTimeout(() => {
console.log(i)
}, 0)
}
agg(i)
}