理解函数的调用时机是弄清楚函数的关键。
首先看一段代码
let a =1
function fn(){
console.log(a)
}
这段代码可以打印出什么?不知道,因为没有被调用。
下面这段代码可以打印出什么?
let a =1
functon fn(){
console.log(a)
}
fn()
打印出1,因为函数被调用了。
当函数内部出现setTimeout(()=>{},0),需要等待a赋值2的任务执行完之后才执行,所以打印出的是2。
let a = 1
function fn(){
setTimeout(()=>{
console.log(a)
},0)
}
fn()
a = 2
for循环里出现setTimeout(()=>{},0),需要先执行for 循环,然后再执行setTimeout。
let i = 0
for(i = 0; i<6; i++){
setTimeout(()=>{
console.log(i)
},0)
}
因为for循环执行完成之后,i的值为6,而在等待i变成了6次6之后,再要求打印,所以打印出的是6个6。
如果想要得到结果为0、1、2、3、4、5,可以let在for循环里面,这样js在for和let一起用的时候,每次循环会多创建一个i。
for (let i = 0; i<6; i++){
setTimeout(()=>{
console.log(i)
},0)
}