JS中函数的不同执行时机,会影响到函数运行的输出结果,要根据函数具体的执行时机来判断函数输出什么。例如,下面这段代码 :
let i = 0
for(i = 0; i<6; i++){
setTimeout(()=>{
console.log(i)
},0)
}
执行结果如下:
为什么上面的代码执行输出了6个6呢?因为setTimeout是一个异步任务,执行到这里的操作会被浏览器丢到另一个任务队列里去,浏览器这时候会继续往下执行,把下面的代码都执行完了才会来执行setTimeout函数里的操作,这时候因为for循环已经把i加到6了,所以输出的全部都是6。
让上面代码打印 0、1、2、3、4、5 的方法 ( for let 配合)
如果要打印出来0,1,2,3,4,5的话,可以采用以下代码来实现:
for(let i = 0; i<6; i++){
setTimeout(()=>{
console.log(i)
},0)
}
为什么把let i = 0写入for循环里面就可以实现了呢?因为JS在for和let一起用的时候会加东西,每次循环的时候会多创建一个i。
除了使用 for let 配合,其他可以打印出 0、1、2、3、4、5的方法
- 通过 setTimeout 的第三个参数,将i传进去,代码如下:
let i=0
for(i = 0; i<6; i++){
setTimeout((value)=>{
console.log(value)
},0,i)
}