JS 事件执行机制 宏任务/微任务

300 阅读1分钟

event loop

指的是浏览器和 node 解决 js 单线程运行时不会阻塞的一种机制

js执行方式

总结1:加载的时候就分为同步任务、微任务、宏任务,遇到同步任务放到主线程再立即执行;遇到微任务先放到微任务队列,等同步任务执行完再依次执行微任务;遇到宏任务先把它放到宏任务队列,在任务对列里面就执行代码 得出结果,等微任务执行完再依次执行宏任务

总结2:

  1. 先执行同步任务 遇到函数就执行函数;
  2. 函数调用完了继续执行同步任务;
  3. 同步任务完成 就 执行微任务promise await后的任务才是微任务;
  4. 微任务执行完;再执行宏任务 settimeout

执行顺序:同步任务>微任务>宏任务

微任务

Promise(同步的立即执行函数) Promise.then 里的才属于微任务 async await

let a = new Promise(res => {
    console.log('promise1');//同步任务
    res()
})
a.then(() => {
    console.log('promise2');//微任务
})
async function async1() {
    console.log('async1 start 同步任务');
    await async2()
    console.log('async1 end 微任务')
}
async function async2() {
    console.log('async2 end 同步任务')
}

宏任务

settiomeout setinterval DOM事件 网络请求

setTimeout(function () {
    console.log('setTimeout1');
}, 0);//即使为 0  也是等微任务执行完了 再执行宏任务