javaScript是一门单线程语言,它的异步和多线程的实现是通过event loop(事件循环)来实现的。
javaScript Event Loop大体有三部分组成:调用栈 call stack 消息队列 message queue 和 微任务队列 Microtask queue。
Event Loop 刚开始时,会从全局栈的代码开始一行一行执行,遇到函数调用就把函数压入栈中(调用栈),被压入的函数叫做帧frame, 当函数返回(函数return 或者 执行完毕)后会从调用栈中弹出。
javaScript 中的异步操作:fetch、事件回调、setTimeout、setInterval中的函数会入队到消息队列中,称为消息,消息会在调用栈清空的时候执行
使用Promise 、async 、await创建的异步操作会加入到微任务队列中,会在调用栈清空的时候立即执行,并且处理期间加入的微任务也会一同执行