# 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