生活中的事件循环(前端小白的理解)

80 阅读1分钟

1.事件队列(eventLoop) ,浏览器有个渲染主线程会执行各种任务。举个栗子,将做一桌菜,比作要执行的一个大任务。大任务中分同步任务和异步任务,同步任务好比洗菜切菜(如console.log()),会先执行。

  1. 菜准备好了可以开始炒菜了,此时炒菜的锅(主线程的执行栈)是空的。开始炒第一个菜,把油,盐,酱油(如promise.then等)依次排列好(微任务队列),那我炒这个菜,就必须得把油、盐、酱油全都放锅里炒(执行微任务)。

  2. 在煮第一个菜中途,老婆跑过来说下一个菜煎鸡蛋(setTimeout,I/O,setInterval,事件,script代码块等宏任务)。我用个小本本记起来(宏任务队列),等第一个菜炒完(执行完所有微任务)。

4.此时锅(执行栈)空了,就可以开始煎鸡蛋了(从小本本宏任务队列取出执行),这样便形成了一个事件循环。完成所有循环(这一桌菜也煮好了),浏览器也完成了全部的渲染。