
要了解事件循环首先需要知道几个知识点栈和队列、宏任务和微任务JS代码执行的时候有一个执行栈先进后出遇到一个3S的定时器js执行定时器此时浏览器会新开一个线程B去做定时器的计时工作js会继续向下执行。线程B在计时工作结束时把定时器的回调函数放到一个任务队列先进先出里所以3s的计时器不是在3s结束后立即执行的。等到执行栈里面的函数都执行完了再从任务队列里面取回调去执行。因为JS执行代码的速度很快所以感官上定时器到时间后就立即执行了。这个不断监听的过程就是事件循环1、工作机制浏览器的事件循环是js引擎和浏览器渲染引擎之间协调执行的工作机制。2、主要作用监视调用栈和任务队列当调用栈为空事件循环从任务队列中取出任务执行。*js是单线程的如果做一些比较耗费时间的事当前的线程就被阻塞后续的一些不耗时操作也需要等待浪费效率。所以真正耗时的操作浏览器用其他线程去解决。像网络请求、定时器、事件监听等函数都配有一个回调函数js的单线程只需要执行这些回调函数就可以事件循环会告诉js什么时候去执行这些回调函数。3、任务执行时机js优先在栈中取任务执行栈中任务被全部执行完之后在微任务队列中取任务执行然后是执行宏任务队列。在执行宏任务队列时每执行完一个宏任务都会再次查看是否有微任务需要执行如有则先清空微任务队列没有则继续执行宏任务。4、示例console.log(1)//入栈 //入宏任务队列 setTimeout((){ console.log(2) },0) //入微任务队列 Promise.resolve().then((){ console.log(3) }) console.log(4)//入栈 //输出顺序: 1 4 3 2