JS的基础类型有Number,String,Boolean,Undefined,Null,Symbol,Bigint,这些类型的变量储存在栈上(速度仅次于寄存器,但生命周期比较严格),引用类型有对象字面量、数组、函数等,储存在堆上。

当我们写出如上图age=oldage的语句时,此时age与oldage实际指向同一个基础类型变量地址的值。然而当我们改变age的值时,我们会在一个新的地址创建变量并指向它。

然而当我们使用引用变量时,我们首先在堆上的D30F地址处创建了该对象,并在栈上创建了一个新的变量,变量的值指向堆上的地址D30F。当我们写出friend=me时,我们实际是将friend指向了栈上0003地址处的D30F对象。

这也是为什么对象是const常量但我们依然能改变其中属性的原因。因为我们实际并没有改变栈上变量指向的地址。

用记录对抗遗忘