浏览器的event loop
在浏览器的事件中,包含宏任务和微任务。宏任务有:setImmediate,setTimeOut,setInterval,I/O,requestAnimationFrame,UI rendering,微任务有:promise,process.nextTick,Object.observe,MutationObserver
- 执行全局script同步代码,这些代码有的是同步任务,有的是异步任务
- 执行完所有同步代码后,调用栈就清空了
- 从微任务队列中取出位于队首的任务进行执行,微任务队列长度减一
- 继续取出微任务队列队首任务并放到stack调用栈中执行,直到微任务队列被清空,这过程中如果由产生了微任务,则会被放到队列最尾端,在此过程中一起被清空
- 当微任务队列为空,则去宏任务队列取出队首任务放到调用栈执行
- 执行完毕后,再次检查微任务队列并执行,如此循环往复。。