首页 > 其他分享 >【js】事件循环evenloop

【js】事件循环evenloop

时间:2022-12-08 15:35:22浏览次数:46  
标签:异步 resolve console log js 任务 循环 setTimeout evenloop

先上题目

 console.log(1)
setTimeout(()=>{
        console.log(2)
    },0)
 console.log(3)

答案:1 3 2

console.log(1)
  setTimeout(()=>{
        console.log(2)
    },0)
new Promise(resolve=>{
console.log(3)
resolve()
}).then(()=>{
    console.log(4)
})
console.log(5)

答案 : 1 3 5 4 2 

console.log(1)
  setTimeout(()=>{
        console.log(2)
    },0)
new Promise(resolve=>{
console.log(3)
resolve()
}).then(()=>{
 console.log(4)
    setTimeout(()=>{
        console.log(5)
    },0)
})
console.log(6)

 答案: 1 3 6 4 2 5  

console.log(1)

function a(){
    console.log(2)
    b()
}

function b(){
    setTimeout(()=>{
        console.log(3)
    },0)
    console.log(4)
}

a()

new Promise(resolve=>{
console.log(5)
resolve()
}).then(()=>{
    console.log(6)
    setTimeout(()=>{
        console.log(7)
    },0)
})

console.log(8)

答案: 1 2 4 5 8 6 3 7

t同步>异步(微任务>宏任务)

执行顺序 同步 1 ->a()执行 输出 2 -> 调用b() setimeout 属于异步任务里面的宏任务,放到任务队列里面,等待同步任务在主线程执行完毕,再执行异步任务队列中的事件。输出4 ->promise
是一个异步,但是new promise是创造一个构造函数,第一层是同步任务 ;第二层.then() .cath()是异步。输出 5  .then()属于异步任务里面的微任务,放到任务队列---> 输出 8 --->主线程的同步任务已经出栈执行完毕,开始检查任务队列里面的事件。异步的任务队列里面,微任务的优先级高于宏任务,先微后宏。所以.then()会先执行,输出6,接着往下是settimeout,会继续放到任务队列宏任务。--->微任务出栈完毕,开始检查宏任务,settimeout时间一致,先后顺序执行,依次输出 3 7 。
这一整个事件的过程就叫事件循环机制。
 


标签:异步,resolve,console,log,js,任务,循环,setTimeout,evenloop
From: https://www.cnblogs.com/522040-m/p/16908883.html

相关文章