javascript-事件循环

85 阅读1分钟

宏任务:setTimeout \ setInterval \ requestAnimationFrame 等

宿主环境内所有的内建或自定义的变量/函数都是 global/window 这个全局对象的属性/方法,而由宿主环境提供的也叫宏任务。

微任务:Promise \ queueMicortask \ MutationObserver

执行优先级:主线任务 > 微任务 > 微任务里的微任务 > 宏任务

// index.js
console.log(1) // 主线任务
setTimeout(() => { // 宏任务
    console.log(5)
}, 0)
Promise.resolve().then(() => { // 微任务
    console.log(3)
    queueMicrotask(() => { // promise里面不可以放queueMicrotask 会报错
      /* 微任务中将运行的代码 */
      console.log('3-1')
    });
}).then(() => {
    console.log(4) // 微任务里面的微任务
})
console.log(2) // 主线任务

function testFn (){
    console.log('a') // 主线任务
    setTimeout(() => { // 宏任务
        console.log('f')
    }, 0)
    const b = Promise.resolve().then(() => { // 微任务
        console.log('c')
        Promise.resolve().then(() => { // 微任务插队当前微任务
            console.log('c1')
        })
    }).then(() => {
        console.log('d') // 微任务里面的微任务
    })
    console.log('b')// 主线任务
    return 'e' // 完成了微任务后才执行
}
testFn();

// 1、2、a、b、3、c、4、c1、d、e、5、f