什么是事件循环机制?
JS是一门单线程的语言,事件循环是JS的异步执行机制。事件循环的工作流程是
- 首先,检查执行栈,看看是否有同步任务需要执行。
- 如果执行栈为空,那么就检查任务队列。
- 如果任务队列中有待处理的任务,那么就将它移出队列并放入调用堆栈并执行这个任务。
任务队列分为宏任务队列和微任务队列。在一个事件循环迭代中,首先执行一个宏任务,然后执行所有的微任务。当所有的微任务完成后,再执行下一个宏任务。
宏任务包括如setTimeout,setInterval,setImmediate,I/O,UI rendering等(setTimeout里的回调函数算宏任务), 而微任务包括如Promise,MutationObserver等(注意promise内的回调函数会当作同步代码立即执行,then/catch里才是微任务) (微任务中如果新建了一个微任务,那么将继续执行微任务而不去执行宏任务)。