JS运行引擎组成
调用栈
同步,单线程——每个 浏览器级别的主窗口:标签页 具备 一个 独立的调用栈 。用于存放需要执行的代码指令
const a = () => {
const b = () => {
console.log(2)
}
b()
}
a()
以上指令在调用栈的表现为:
//调用栈push
a()
b()
console.log(2)
//调用栈pop
console.log(2)
b()
a()
当执行 指令过多,堆积在栈中,就会导致 栈溢出(stack overflow)
内存堆
声明的变量,以无序的方式存放在 内存堆中。如下:
const a = 1;
当分配 过多不使用 的变量占用了 内存堆 的区域,就会导致 内存溢出(memory leak)
JS运行环境
事件循环
用于监测 引擎的 同步调用栈 是否空余,因此决定合适将 回调队列 的方法放入 调用栈
Web APIs
AJAX , timeout等异步执行函数
回调队列
用于存放异步调用的执行指令