宏任务和微任务

 1、我们执行 JS 代码的时候就是往执行栈中放入函数,当遇到异步的代码时,会被挂起并在需要执行的时候加入到 Task(有多种 Task) 队列中。一旦执行栈为空,Event Loop 就会从 Task 队列中拿出需要执行的代码并放入执行栈中执行,所以本质上来说 JS 中的异步也还是同步行为。

2、微任务包括 process.nextTick ,promise.then ,MutationObserver (MutationObserver:原生api中用来监听node节点变化的一个类)。

3、宏任务包括 script , setTimeout  ,setInterval ,setImmediate(该方法用来把一些需要长时间运行的操作放在一个回调函数里,在浏览器完成后面的其他语句后,就立刻执行这个回调函数) ,I/O ,UI rendering(执行完所有的micro-task任务后,再清空micro-task/宏任务,此时本轮循环结束,开始执行UI render) 。

4、这里很多人会有个误区,认为微任务快于宏任务,其实是错误的。因为宏任务中包括了 script ,浏览器会先执行一个宏任务,接下来有异步代码的话才会先执行微任务。

原文地址:https://www.cnblogs.com/cnlg123/p/14807867.html