轮询就是通常说的 event loop 而事件队列则是event loop 的具象化
话不多说 上题目
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 的单线程执行的时候会按照至上而下的顺序执行这个叫同步,当遇见异步的时候他不会马上执行而是会放到事件队列中去,等待主任务执行完毕再执行异步
网友评论