轮询机制 事件队列

轮询就是通常说的 event loop 而事件队列则是event loop 的具象化

话不多说 上题目


image.png

看我慢慢分析

image.png

1、先执行主线程
2、遇到宏队列(macrotask)放到宏队列(macrotask)
3、遇到微队列(microtask)放到微队列(microtask)
4、主线程执行完毕
5、执行微队列(microtask),微队列(microtask)执行完毕
6、执行一次宏队列(macrotask)中的一个任务,执行完毕
7、执行微队列(microtask),执行完毕
8、依次循环。。。

注意两个事件 nextTick 执行优先于 微任务 而 requestIdleCallback 只会在空余时间执行就是所有任务执行完毕之后执行 *
是通常说的 event loop 而事件队列则是event loop 的具象化
*

话不多说 上题目


image.png
  • 常见的宏任务:script(整体代码), setTimeout, setInterval, setImmediate, I/O, UI rendering。
  • 微任务: Promises, Object.observe, MutationObserver
    看我慢慢分析
    image.png

    1、先执行主线程
    2、遇到宏队列(macrotask)放到宏队列(macrotask)
    3、遇到微队列(microtask)放到微队列(microtask)
    4、主线程执行完毕
    5、执行微队列(microtask),微队列(microtask)执行完毕
    6、执行一次宏队列(macrotask)中的一个任务,执行完毕
    7、执行微队列(microtask),执行完毕
    8、依次循环。。。

*注意两个事件 nextTick 执行优先于 微任务 而 requestIdleCallback 只会在空余时间执行就是所有任务执行完毕之后执行 *

什么是异步?(当时被问的一懵不知道怎么回答)
异步想相对于同步而言的 JS 的单线程执行的时候会按照至上而下的顺序执行这个叫同步,当遇见异步的时候他不会马上执行而是会放到事件队列中去,等待主任务执行完毕再执行异步

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容