JavaScript 什么是事件循环
JavaScript 是一种单线程异步编程语言。但是这是什么意思?我们一直在谈论的 JavaScript 中的事件循环是什么?
当我们说 JavaScript 是单线程时,我们是什么意思?
这意味着 JavaScript 代码运行所在的主线程以一行一行的方式运行,并且没有可能并行运行代码。

示例:
console.log("Before delay");
function delayBySeconds(sec) {
let start = now = Date.now()
while(now-start < (sec*1000)) {
now = Date.now();
}
}
delayBySeconds(5);
// Executes after delay of 5 seconds
console.log("After delay");
输出:
Before delay
(... waits for 5 seconds)
After delay
JavaScript中的内存分配:
1)堆内存: 数据以随机方式存储和分配内存。

2)堆栈内存: 以堆栈形式分配的内存。主要用于函数。

调用堆栈功能: 调用堆栈是一个用于在运行时跟踪所有其他函数执行情况的函数。你是否在JavaScript中遇到错误时看到过堆栈跟踪的信息被打印出来?那不过是当错误发生时当前函数堆栈的快照。
示例:
function LevelTwo() {
console.log("Inside Level Two!")
}
function LevelOne() {
LevelTwo()
}
function main() {
LevelOne()
}
main()

函数执行的顺序,即在函数的目的完成后从堆栈中弹出,如下所示:

事件循环: 事件循环是一种当函数栈变为空时,从队列中取出内容并放入函数执行栈中的机制。

事件循环是JavaScript通过单线程给我们提供多线程的幻觉的秘密。下面的幻觉很好地演示了事件循环的功能:

在执行SetTimeOut()和Web API进行所述等待时,事件队列中的回调函数尚未运行,并等待其进入堆栈的时间。当函数堆栈为空时,函数将加载到堆栈上,如下所示:

这就是事件循环的作用,它从事件队列中获取第一个事件,并将其放置在堆栈中,也就是在这种情况下是回调函数。从这里开始,该函数会执行并调用其中的其他函数(如果有的话)。

这个循环被称为 事件循环 ,这是JavaScript管理事件的方式。
极客教程