先来道今日头条面试题开开胃面试
async function async1() { console.log('async1 start'); await async2(); console.log('async1 end'); } async function async2() { console.log('async2'); } console.log('script start'); setTimeout(function() { console.log('setTimeout'); }, 0) async1(); new Promise(function(resolve) { console.log('promise1'); resolve(); }).then(function() { console.log('promise2'); }); console.log('script end');
执行结果是否是和你想的有些不一样?下面是我查阅资料后总结的同步任务和异步任务的执行顺序promise
一、无论是同步仍是异步,js都会按顺序执行,只是不等待异步的执行结果而已(并非遇到异步的就绕过不执行,别蒙了)异步
二、同步的任务没有优先级之分,异步执行有优先级,先执行微任务(microtask队列),再执行宏任务(macrotask队列),同级别按顺序执行async
微任务: `process.nextTick` ,`promise` ,`MutationObserver`函数
宏任务:`script` , `setTimeout` ,`setInterval` ,`setImmediate` ,`I/O` ,`UI rendering`spa
三、await表示让出线程,继续执行后面的函数(执行当前函数后面的函数,不是当前函数里面的)线程