浏览器中的事件循环机制(Event Loop)
浏览器中的事件循环机制(Event Loop)
事件循环的运行机制是,先执行栈中的内容,栈中的内容执行后执行微任务,微任务清空后再执行宏任务,先取出一个宏任务,再去执行微任务,然后在取宏任务清微任务这样不停的循环
事件循环可以简单描述为以下四个步骤
- 函数入栈,当执行到异步任务的时候,就将他丢给WebAPIs,接着执行同步任务,直到栈清空。
- 此期间,WebAPIs 完成这个事件:把回调函数放入队列中等待执行(微任务放到微任务队列,宏任务放入宏任务队列)
- 执行栈为空时,Event Loop 把微任务队列执行清空
- 微任务队列清空后,进入宏任务队列,取队列的第一项任务放入栈中执行,执行完成后,查看微任务队列是否有任务,有的话,清空微任务队列,重复第4步,继续从宏任务中取任务执行,执行完成之后,继续清空微任务,如此反复循环,直至清空所有任务。
浏览器中的任务源
宏任务
setTimeout、setInterval、DOM事件、AJAX请求
微任务
Promise、async/await、mutationObserver等