JS中的变量在内存中的具体存储形式

230 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第18天,点击查看活动详情

js中的变量主要有两种:基本类型的变量和引用类型的变量。那么这两种变量类型在内存中是如何存储的呢?我们先来介绍一下两种数据结构:堆、栈和队列。

栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。

栈的特点

  • 先进后出
  • 后进先出

image.png

堆(Heap)是计算机科学中一类特殊的数据结构,是最高效的优先级队列。堆通常是一个可以被看做一棵完全二叉树的数组对象。

堆的特点

  • 堆中某个结点的值总是不大于或不小于其父结点的值;
  • 堆总是一棵完全二叉树。

队列

队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。

队列的特点

  • 先进先出
  • 后进后出

image.png

基本类型在内存中的存储形式

基本类型的变量是存储在栈内存的。

image.png

基本类型的变量的复制

let a = 'test';
let b = a;

image.png

引用类型在内存中的存储形式

引用类型的引用标识符是存储在栈内存中,真正的内容是存储在堆内存中

引用类型变量的复制

image.png

为什么js的变量是这样在内存中存储的

  1. 堆的内存比栈的内存要大,而基本类型比较简单,引用类型比较复杂,因此基本类型的变量就放在栈内存中了,引用类型的变量的内容就放在堆内存了。
  2. 堆内存是无序存储,比较适合引用的查找。