为什么如下代码会打印 6 个 6
let i = 0
for(i = 0; i<6; i++){
setTimeout(()=>{
console.log(i)
},0)
}
上面这种情况是使用for循环执行循环体这时循环体中会开启一个定时器,但这时这个定时器还没有执行里面的内容只是生成了一个定时器,后判断i是否满足 i<6 然后执行i++,然后又执行下一次循环开启一个定时器,当所有循环执行完毕之后也就是现在生成了6个定时器,这时定时器才会执行里面的语句打印出i这时由于for循环执行完毕 i = 6 所以console.log(i) 会打印出6个6
怎么能够打印出0,1,2,3,4,5
这里我们只需要去掉全局定义的let i = 0 把let i = 0放入到循环体里去申明就可以了
for(let i = 0; i<6; i++){
setTimeout(()=>{
console.log(i)
},0)
}
这里在每一次循环体中就会多创建一个i放在每次的循环体里 (即console打印出 i 的值都是当前循环下i的值)
这是我查找资料获取的一个方法通过闭包(来自CSDN)
for(var i = 0;i<4;i++){
fun(i)
}
function fun(i){
return setInterval(function(){
console.log(i)
},1000)
}
```