# 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