js 宏任务和微任务

  1. 代码
    setTimeout(function() {
        // 异步宏任务
        console.log('1');
    })
    
    new Promise(function(resolve) {
        // 同步
        console.log('2');
    }).then(function() {
        // 微任务
        console.log('3');
    })
    
    // 同步
    console.log('4');
    
    //打印顺序 2 4 3 1
  1. 解析:
    1. 此段代码的宏任务: js全部代码、setTimeout; 微任务:promise.then
    2. 执行的时候先执行第一个宏任务,即js全部代码,在执行里面的微任务 promise,最后执行下一个宏任务 setTimeout
  2. 图解:
    宏任务和微任务执行顺序流程图
  3. 常见宏任务和微任务
    1. 宏任务:script全部代码、setTimeout、setInterval、setImmediate(浏览器暂时不支持,只有IE10支持,具体可见MDN)、I/O、UI Rendering
    2. 微任务:Process.nextTick(Node独有)、Promise、Object.observe(废弃)、MutationObserver