首先,js是单线程的所以事件都是一个一个执行的;
然后事件循环是执行栈中先去宏任务拿同步事件先执行,然后再拿异步事件执行。执行异步事件时遇到事件,会把这个事件放到宏任务里面去排队。
执行完第一轮宏任务,就先不会管放进去的事件了。接着去微任务里面拿事件到执行栈执行,执行的时候再遇到异步的事件又给它放回微任务事件队列去排队,这就是一次循环。
第一次循环后,又开始到宏任务去取事件来执行,这样的循环叫事件循环。
宏任务 (macrotask) 里面事件排队的顺序:同步事件,setTimeout|setInterval|setImmediate|requestAnimationFrame,
微任务(microtask )里面事件队列排队先进先出:process.nextTick(node),MutationObserver,Promise.then catch finally