为什么如下代码会打印 6 个 6
let i = 0
for(i = 0; i<6; i++){
setTimeout(()=>{
console.log(i)
},0)
}
- 先执行完当前的代码,进行六次循环
- 然后等会再执行打印动作(有六遍打印动作)
- 因为执行完循环后,i等于6,然后再打印i,所以打印了六遍6
写出让上面代码打印 0、1、2、3、4、5 的方法
for(let i =0; i<6; i++){
setTimeout(()=>{
console.log(i)
},0)
}
- 因为JS在for和let一起用的时候会加东西
- 每次循环会多创建一个i,新建的i都会留在里面
- 为了符合新手程序员的想法
一个简单案例
let a = 1
function fn(){
setTimeout(()=>{
console.log(a)
},0)
}
fn()
a=2
2
- setTimeout(()=>{console.log(a)},0)的意思是一段时间后,尽快打印出a
- JS先把当前代码执行完毕后
- 才会做等会要做的事
- 所以JS先让a=2
- 而console.log(a)打印的时机是,a已经是2之后
- 所以打印出2