2020-11-07

2020-11-07  本文已影响0人  二荣xxx

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 就和大部分新人的想法一致了

上一篇 下一篇

猜你喜欢

热点阅读