1、事件循环:实际上就是循环每一个任务队列,一个事件循环中可以有一个或者多个任务队列,在事件循环中,每进行一次循环的关键步骤主要有:
(1)在此次循环中选择最先进入队列的任务,如果有则执行一次
(2)检查是否存在微任务(new Promise(()=>{ }).then(res=>{})),如果存在则不停地执行,直至清空微任务队列。
(3)更新render(DOM渲染)、
2、宏任务
3、微任务
微任务(microtask)是宏任务中的一个部分,它的执行时机是在同步代码执行之后,下一个宏任务执行之前。
微任务包括:(Promise.then、process.nextTick(Node.js 环境)
4、运行机制
在事件循环中,每进行一次循环操作称为 tick,每一次 tick 的任务处理模型是比较复杂的,但关键步骤如下:
(1)执行一个宏任务(执行栈中没有就从事件队列中获取) (2)执行过程中如果遇到微任务,就将它添加到微任务的任务队列中 (3)宏任务执行完毕后,立即执行当前微任务队列中的所有微任务(依次执行) (4)当前宏任务执行完毕,开始检查渲染,然后GUI线程接管渲染 (5)渲染完毕后,JS线程继续接管,开始下一个宏任务(从事件队列中获取)