宏任务macrotask有哪些
script setTimeout setInterval MessageChannel postMessage setImmediate requestAnimationFrame
微任务microtask有哪些
process.nextTick MutationObserver Promise.then
执行优先级
js是单线程所有主线程的同步任务先执行,然后执行微任务队列的程序,最后执行宏任务队列,秉承先进先出的原则。
代码案例
setTimeout(function(){
console.log('1')
});
new Promise(function(resolve){
console.log('2');
resolve();
}).then(function(){
console.log('3')
});
console.log('4');
整个代码的执行流程是: setTimeout推到宏任务队列 然后遇到promise立刻执行,输出2。遇到promise.then推到微任务队列。继续往下,输出4。 至此,当前主线程中的同步任务执行完毕,读取微任务队列中的promise.then,输出3 浏览器渲染之后继续执行宏任务setTimeout,输出1