JavaScript中变量的存储机理
- 基础类型
- 包括
- number
- string
- boolean
- null
- undefined
- symbol
- 基础类型的变量名和变量值都保存在栈内存中,具体形式如表所示:
|变量名| 变量值|
|–|--|
| a | 10 |
| b | 20 |
- 包括
-
Object
- 对象类型
变量名 变量值 obj 变量地址 具体如图:
JavaScript对象这样存储的原因是,对象所需要的存储空间不固定,且所占的内存空间比较大,因此将对象分开存储,将变量名与变量所在的首地址存放在栈内存中,将变量的实际地址存放在栈内存中
与变量存储有关的变量复制问题,与对象类型的传值问题
- 变量复制问题
- 普通类型的变量复制
var a = 10;
var b = a;
a和b的存储结构如下表所示:
变量名 | 变量值 |
---|---|
a | 10 |
b | 10 |
a和b是互不影响的两个变量,修改b的值不会影响a的值
- 对象的复制(在此只介绍概念,详见浅拷贝与深拷贝)
- 浅复制
- 复制对象的栈内存部分,即复制对象名与对象所在的地址,不复制对象的值
- 深复制
- 复制变量栈内存中的部分和堆内存的部分
- 复制变量栈内存中的部分和堆内存的部分
- 浅复制
- 传参问题
- 基本类型的传参就是将变量的值复制给参数
- 对象的传参是将变量浅复制给参数