众所周知,Javacript 是单线程语言,但是为什么我们可以使用异步操作呢?因为异步操作是由具有多线程、多进程能力的浏览器执行的。 Javascript始终运行在单线程上,当异步代码被发现时,就会交给浏览器执行,然后浏览器调用相应的线程或进程,包括http请求、GUI、事件触发等来处理这些异步操作.
一般来说,Javasctip 任务可以分为三类:同步任务、微任务、宏任务,运行顺序为sync -> 任务。微->宏。首先执行同步代码,然后浏览器会将微代码放入等待同步任务完成的微任务队列中,并将宏代码放入等待微代码完成的宏任务队列中。
这个优先级顺序类似于OS上的多级反馈队列调度算法。
常见微任务:Promise.then()、Promise.catch()、new MutationObserver()、process.nextTick()
常用宏任务:setTimeout、setInterview、requestAnimationFrame()
顺便说一下,process.nextTick() 既不是微任务也不是宏任务,它只是在同步代码之后、微任务之前运行。
以上是Javascript事件循环规则详解的详细内容。更多信息请关注PHP中文网其他相关文章!