ES6 规范中,microtask 称为 jobs,macrotask 称为 task
宏任务是由宿主发起的,而微任务由JavaScript自身发起。
主流程、setTimeout setInterval() 都属于宏任务
await promise 属于微任务
执行主流程时会遇到微任务和宏任务,把微任务放到微任务队列里等待 宏任务放到宏任务队列里,继续往下执行主流程,主流程执行完后执行微任务队列再执行宏任务的队列,执行微任务或者宏任务队列时按照先进先出原则执行任务。
下面举个例子:

运行结果

网友评论