# js中变量的存储
堆内存和栈内存:
栈内存主要用于存储各种基本类型的变量
如:Boolean、Number、String、Undefined、Null,以及对象变量的指针堆内存主要用于存储Object这种变量类型的变量
| 栈内存 | 堆内存 | |
|---|---|---|
| a | 100233 | |
| b | 'ab2c' | |
| c | null | |
| d | true | |
| e | undefined | |
| f | 指针1 | object |
| g | 指针2 | object |
| ... | ... |
区别:
栈内存中的变量一般都是已知大小或者有范围上限的,属于简单存储
堆内存存储的对象类型数据一般都是未知大小的
let、const禁止声明重复变量
因为他们初始化变量时,会先遍历内存栈,寻找是否有重名变量
扩展:
NaN、null、new的存储问题
- NaN 属于Number类型,所以存储在栈内存中
- null 是object,却存储在栈内存中
- new 出来的都是对象,所以是在堆内存中
如 console.log(new String('12') === new String('12')) 输出 false