JS 函数的执行时机
函数的执行时机不同结果也会不同,js也分为同步执行和异步执行
简单的举几个同步执行例子
1、
let a = 1
function fn(){
console.log(a)
}
fn()
答案:a=1
原因:a被赋值为1,调用fn打印出的a当然为1
2、
let a = 1
function fn(){
console.log(a)
}
a = 2
fn()
答案:a=2
原因:a被赋值为2之后执行的fn
3、
let a = 1
function fn(){
console.log(a)
}
fn()
a = 2
答案:a=1
原因:调用fn之后a才被赋值为2,在执行fn时a的值时1
然后是异步执行的例子
1、
let a = 1
function fn(){
setTimeout(()=>{
console.log(a)
},0)
}
fn()
a = 2
答案:2
原因:setTimeout是延迟执行的意思,在当前任务执行完成后再打印a的值,因此在调用fn时a的值为2,打印出的a的值就是2了
2、
let i = 0
for(i = 0; i<6; i++){
setTimeout(()=>{
console.log(i)
},0)
}
答案:6个6
原因:for循环大家都知道,只有在条件不满足时才会结束循环,所以在i=6时跳出循环(i=5时又走了一个i++才跳出循环),此时才执行setTimeout,而循环执行了六次,因此打印出的结果为6个6
3、
for(let i = 0; i<6; i++){
setTimeout(()=>{
console.log(i)
},0)
}
答案:1、2、3、4、5
原因:每次循环 i 都会单独复制一份再setTimeout,console.log(i),因此此时打印的 i 就和大部分新人的想法一致了
网友评论