常见的宏任务和微任务 宏任务:script(整体代码)、setTimeout、setInterval、I/O、事件、postMessage、 MessageChannel、setImmediate (Node.js) 微任务:Promise.then、 MutaionObserver、process.nextTick (Node.js) 来做几道题 看看下面这道题你能不能做出来。 setTimeout(() => { console.log('A'); }, 0); var obj = { func: function() { setTimeout(function() { console.log('B'); }, 0); return new Promise(function(resolve) { console.log('C'); resolve(); }); }, }; obj.func().then(function() { console.log('D'); }); console.log('E'); 第一个 setTimeout 放到宏任务队列,此时宏任务队列为 ['A'] 接着执行 obj 的 func 方法,将 setTimeout 放到宏任务队列,此时宏任务队列为 ['A', 'B'] 函数返回一个 Promise,因为这是一个同步操作,所以先打印出 'C' 接着将 then 放到微任务队列,此时微任务队列为 ['D'] 接着执行同步任务 console.log('E');,打印出 'E' 因为微任务优先执行,所以先输出 'D' 最后依次输出 'A' 和 'B'
异步执行分析
最新推荐文章于 2021-04-10 20:24:48 发布