持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第18天,点击查看活动详情
js中的变量主要有两种:基本类型的变量和引用类型的变量。那么这两种变量类型在内存中是如何存储的呢?我们先来介绍一下两种数据结构:堆、栈和队列。
栈
栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
栈的特点
- 先进后出
- 后进先出
堆
堆(Heap)是计算机科学中一类特殊的数据结构,是最高效的优先级队列。堆通常是一个可以被看做一棵完全二叉树的数组对象。
堆的特点
- 堆中某个结点的值总是不大于或不小于其父结点的值;
- 堆总是一棵完全二叉树。
队列
队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。
队列的特点
- 先进先出
- 后进后出
基本类型在内存中的存储形式
基本类型的变量是存储在栈内存的。
基本类型的变量的复制
let a = 'test';
let b = a;
引用类型在内存中的存储形式
引用类型的引用标识符是存储在栈内存中,真正的内容是存储在堆内存中
引用类型变量的复制
为什么js的变量是这样在内存中存储的
- 堆的内存比栈的内存要大,而基本类型比较简单,引用类型比较复杂,因此基本类型的变量就放在栈内存中了,引用类型的变量的内容就放在堆内存了。
- 堆内存是无序存储,比较适合引用的查找。