引言
之前写了一篇关于事件循环机制的文章,介绍了一下事件循环机制的一些内容。今天我们来聊一下如何向清楚地向面试官表达这个只知识点
你心里其实知道事件循环机制的原理,但是面试的时候,可能表达不出来,有没有老铁遇到过这种情况?
下面,我来教你们组织一下语言
1.首先,当面试官让你谈一谈事件循环机制,你得告诉面试官,什么是事件循环机制
事件循环(Event Loop)是 JavaScript 中管理异步任务的机制,确保程序能够有序地执行同步和异步代码。
2 其次,分析一下它的由来
JS是一门单线程的编程语言,分为同步代码和异步代码。同步代码:不需要消耗时间的代码,异步代码:需要消耗时间的代码
异步代码由分为宏任务和微任务
3.然后,你得向面试官介绍一下常见的异步代码(宏任务,微任务)有哪些
宏任务 (Macro Tasks)
setTimeout
setInterval
setImmediate
(Node.js)- I/O (Node.js)
- UI 渲染
- DOM 操作
fetch
(当它导致网络请求时)XMLHttpRequest
readFile
/writeFile
(Node.js)
微任务 (Micro Tasks)
Promise.then()
MutationObserver
queueMicrotask
process.nextTick
(Node.js)
这里要注意Promise是宏任务,Promise.then() 和 Promise.catch() 是微任务
3.最后,你再向面试官表达一下 是事件循环机制的过程
-
执行同步代码:从上到下执行同步代码。
-
遇到异步任务:
- 如果是宏任务(如
setTimeout
),将其回调放入任务队列。 - 如果是微任务(如
Promise
的.then
),将其回调放入微任务队列。
- 如果是宏任务(如
-
执行栈为空:当执行栈中的同步代码执行完毕后,执行栈变为空。
-
处理微任务:执行所有微任务队列中的回调,直到微任务队列为空。
-
处理宏任务:从任务队列中取出第一个宏任务,将其回调放入执行栈并执行。
-
重复步骤 4 和 5:每次宏任务执行完后,再次处理微任务队列,然后继续处理任务队列中的下一个宏任务。