宏任务和微任务的区分

说到JavaScript的事件循环(Even loop)就会提到同步事件和异步事件



整个JS在运行过程中主要执行以下事件循环

  1. 主程序从上往下执行同步任务
  2. 异步任务会被放入异步任务队列中
  3. 当同步任务执行完成后,会去异步任务队列中执行异步事件

上面就是一个简单的事件循环过程,那么在异步任务中还有宏任务和微任务的区别,他们具体的定义如下

微任务

微任务是异步任务中最早开始执行的,它可以是同步任务、宏任务执行时产生的,微任务能够在实时性和效率之间做一个有效的权衡,一般可以总结为一下几个方法

process.nextTick (node)
Promise
Async/Await
Object.observe
MutationObserver

这里PromiseAsync/AwaitObject.observe以及MutationObserver,都是JS语法内置的方法, 不需要浏览器支持,可以理解为直接用JS引擎就能处理掉的任务

宏任务

可以理解为每一个宏任务进程中都包含了一个微任务进程,事件的触发非JS部分以及定时器都可以归为宏任务

script(代码块)
setTimeout / setInterval 定时器
setImmediate 定时器
I/O
UI render

宏任务会触发新一轮的事件循环,下图就是宏微任务的执行流程图,


https://juejin.cn/post/6932263539839074311?utm_source=gold_browser_extension#heading-2
https://www.jianshu.com/p/75107522813f
https://www.jianshu.com/p/bfc3e319a96b
https://juejin.cn/post/6880787856353132552
https://www.cnblogs.com/fangdongdemao/p/10262209.html

你可能感兴趣的:(宏任务和微任务的区分)