Event Loop
Event Loop:事件循环、Micro Task:微任务、Macro Task:宏任务
我们知道 JavaScript 是单线程语言,一心不能二用,也就是说它只能把一件事干完才能去干另一件事,但前端的一些任务是非常耗时的,比如网络请求,定时器和事件监听,如果让它们和别的任务一样,都老老实实的排队等待执行的话,执行效率会非常的低,甚至导致页面的假死。所以为了保证使用流畅,浏览器采用了 Event Loop 事件循环系统来管理,把那些耗时的任务放入 task queues 栈中,等主程序执行完再执行 task queues 中的任务,通常使用回调函数监听 task queues 中的任务状态。
在其它语言中可以迟延执行,比如 C 语言的 sleep(3) 可以迟延 3 秒执行后边的逻辑,但是在 JavaScript 中是没有这样的操作(除了 alert、confrim、prompt 和异步 xhr,官方说这些是历史遗留的错误设计😂),只能使用异步方式去模拟,模拟的实际也不是真正意义上的 sleep 效果。