# 三种数据结构
JS中三种重要的数据结构, 如图:

(图片来源前端九五六-Javascript 内存空间管理)
# 栈数据结构
其实在《JavaScript执行上下文》中我就已经提到了执行栈, 让我们一起来回顾一下:
栈的特点: 后进先出(LIFO)的结构.
(LIFO: last-in, first-out,类似于向乒乓球桶中放球,最先放入的球最后取出)
这里还是贴上一张网图方便大家理解的好:

栈中的数据就像是一个个乒乓球, 最先进去的最后出来.
注⚠️
这里所说的进栈和出栈不是指赋值算进, 使用算出. 而是指赋值算进, 被清理算出, 而且位于同一函数作用域下的变量, 应该是在栈的同一层.
所谓的变量存储于栈内存中的栈,传统意义上说指的是由内存自动创建分配的空间,例如函数的参数值与局部变量,只是其操作方式类似于栈操作,所以叫栈内存。
比如函数调用其实就相当于栈的形式:
例子🌰:
function fn1() {
console.log(1)
fn2()
}
function fn2() {
console.log(2)
fn3()
}
function fn3() {
console.log(3)
}
fn1()
@前端进阶之旅: 代码已经复制到剪贴板
如上, 声明的顺序是1, 2, 3 , 但是释放的顺序是为3, 2, 1 .
这里释放按照这个顺序是因为 3最先执行完, 所以最先被释放.
# 堆数据结构
一种树状结构。好比 JSON 格式中的数据,你有 key,我有对应的 value, 就立马返给你。
因为我们知道JSON格式的存储是无序的, 所以没有先后顺序, 所以它是一种绝对公平的数据结构.
如图所示:
# 队列数据结构
队列数据结构不同于堆, 队列是一种**先进先出(FIFO)**的数据结构.
它也是**事件循环(Event Loop)**的基础结构.
如图所示:
最先进入队列的任务最先出来, 类似于你排队买票, 排在前面的人先买.
# 变量的存放
通过上面的介绍我们知道了, 内存中有堆了栈, 那么JS变量具体是存放在哪里呢?
- 基本数据类型保存在栈内存中;
- 引用数据类型保存在堆内存中.
- 基本数据类型6种:
Undefined、Null、Boolean、Number、String、Symbol, 由于他们在内存中分别占有固定大小的空间, 通过按值来访问. - 引用数据类型: 也就是
Objec
