宏任务和微任务

149 阅读2分钟

同步任务和异步任务

js将任务分为了同步任务异步任务,同步任务是指在主线程上排队执行的任务,异任务指的是,不进入主线程、而进入“任务队列”的任务,只有在主线程上的任务都执行完之后才会执行“任务队列”里面的任务。

异步任务

异步任务分为宏任务和微任务

常见宏任务、微任务

  • 宏任务:script、setTimeout、setInterval、postMessage、MessageChannel、setImmediate(Node.js 环境)
  • 微任务:Promise.then、Object.observe(已废弃)、MutationObserver、process.nextTick(Node.js 环境)

什么是宏任务?什么是微任务?

  • 微任务:一个需要异步执行的函数,执行时机是在主函数执行结束之后、当前宏任务结束之前。
  • 宏任务:宏任务的时间粒度比较大,执行的时间间隔是不能精确控制的,对一些高实时性的需求就不太符合。

事件循环:宏任务和微任务的执行顺序

事件循环: 执行js代码的时候,遇见同步任务,直接推入调用栈中执行,遇到异步任务,将任务挂起,等到异步任务有返回之后推入到任务队列中,当调用栈中所以同步任务全部执行完成,将任务队列中的任务按顺序一个一个推入并执行,重复执行这一系列的行为。

  1. 先执行宏任务script,并执行里面的同步任务;
  2. 执行栈为空后查询是否存在微任务,存在就立即执行,然后开始下一轮的事件循环。

总结: 宏任务微任务是对同步任务和异步任务的更细致划分js执行时,会先执行宏任务,再执行宏任务下所有的微任务,之后再启下一次的宏任务执行。先执行宏任务script。 注:如果不关注script,优先执行微任务