3.宏任务(macrotask)和微任务(microtask)分别有哪些,有哪些区别?

js宏任务有:<script>整体代码、setTimeout、setInterval、setImmediate、Ajax、DOM事件

js微任务有:process.nextTick、MutationObserver、Promise.then catch finally

 

执行顺序

执行顺序:先执行同步代码,遇到异步宏任务则将异步宏任务放入宏任务队列中,遇到异步微任务则将异步微任务放入微任务队列中,当所有同步代码执行完毕后,再将异步微任务从队列中调入主线程执行,微任务执行完毕后再将异步宏任务从队列中调入主线程执行,一直循环直至所有任务执行完毕。

 

有什么区别?

  • 进程的切换时宏任务,线程的切换是微任务
  • 宿主环境发起的叫宏任务,由语言标准提供的叫微任务
  • 宏任务会触发新一轮的tick,微任务不会

 

为什么要区别他们?

 

微任务的出现,使得在宏任务执行完,到浏览器渲染之前,可以在这个阶段插入任务的能力。

而宏任务和微任务,本质上也是让 JS 脚本能够在渲染阶段前后,有了完成某些功能的能力。

posted @ 2023-03-04 18:08  不想做混子的奋斗远  阅读(68)  评论(0编辑  收藏  举报