由于js 是单线程,也就是说,同一个时间只能做一件事。防止主线程不被阻塞,所以就会涉及到各各流程事件的执行规则的问题,eventloop就产生了
宏任务(macroask
可以理解是每次执行栈执行的代码就是一个宏任务(包括每次从事件队列中获取一个事件回调并放到执行栈中执行)。
包括
script(整体代码)
setTimeout
setInterval
I/O
UI交互事件
postMessage
MessageChannel
setImmediate(Node.js 环境)
微任务(microtask)
以理解是在当前 task 执行结束后立即执行的任务。也就是说,在当前task任务后,下一个task之前,在渲染之前。
包括
Promise.then
Object.observe
MutationObserver
process.nextTick(Node.js 环境)
运行机制
1.执行一个宏任务
2.执行过程中如果遇到微任务,就将它添加到微任务的任务队列中
3.宏任务执行完毕后,立即执行当前微任务队列中的所有微任务(依次执行)
4.当前宏任务执行完毕,开始检查渲染
5.渲染完毕后,开始下一个宏任务(从事件队列中获取)
网友评论