学习笔记--微任务和宏任务

154 阅读1分钟

1.什么是微任务和宏任务?

ES6 规范中,microtask 称为 jobs,macrotask 称为 task
宏任务是由宿主发起的,而微任务由JavaScript自身发起。

总结一下,两者区别为:

宏任务(macrotask)微任务(microtask)
谁发起的宿主(Node、浏览器)JS引擎
具体事件script (可以理解为外层同步代码)、 setTimeout/setInterval、ajax、DOM事件、 requestAnimationFramePromise.then catch finally、async/await
谁先运行后运行先运行
会触发新一轮的Call Stack吗不会

2.微任务、宏任务和DOM渲染的关系

微任务是在DOM渲染前执行
宏任务是在DOM渲染后执行

3.微任务、宏任务和DOM渲染,在event loop中的过程

1.同步代码,一行一行放到Call Stack中执行
2.遇到异步(微任务和宏任务),会先记录下来,等待时机(定时、网络请求)
3.时机到了,就宏任务移到Callback Quene中
4.如果Call Stack为空(同步代码执行完毕),执行当前的微任务
5.微任务结束后,尝试渲染DOM
6.DOM渲染结束后,Event loop开始工作
7.轮询查找Callback Quene,如有则移动到Call Stack执行
8.然后继续轮询查找\