因为js是单线程的,同一时间内只能做一件事,所有的任务都是需要排队的,那么就需要定一个规则,任务怎么排序.
还有一个点子就是,因为有些任务类似I/O比较耗时,会出现页面假死,为了解决这个问题,js设计者就把所有的任务分为同步任务和异步任务,异步任务用分为宏任务和微任务.
1.所有的任务进入执行栈中,然后将区分任务哪些是同步任务哪些是异步任务,同步任务就直接进入主线程中,异步任务进入event table,并注册回调函数
2.进入主线程中任务执行完毕之后,js引擎就按照先后顺序执行任务.
3.异步任务执行完毕之后,就将回调函数放到事件队列中
4.主线程中的任务执行完毕之后,js引擎就去事件队列检查有没有任务可以执行,如果有就先取微任务到主线程中执行微任务.
5.执行完所有的微任务,js引擎就查看是否有宏任务,如果有宏任务,也把宏任务放到主线程中执行,
6.反复执行上述操作,就叫做事件循环.
宏任务:setTimeout,setInterval,requestAnimationFrame,I/o,
微任务:process.nextTick, promise.then catch
原文:https://www.cnblogs.com/wyq20190622/p/13173889.html