内存的存在方式
-
栈内存和堆内存。栈内存存放的是值类型,而堆内存存放的是引用类型。
-
函数的调用、参数、变量都是放在栈内存中的,在函数调用结束之后就会释放。引用类型在栈内存中存放的是指向堆内存的引用。
-
栈内存中的原始值一旦确定就不能被更改(不可变的):
定义一个原始类型变量时,在栈内存中激活一块内存。let a=“abc”
更改原始类型变量值时,也会激活一块内存。 a=“edf”
将原始变量赋值给另一个新的变量时,也会激活一块内存。 let b=a -
栈内存中的对象引用是可以被更改的(可变的):
把引用类型变量赋值给另一个变量时,会将源变量指向栈内存中的对象引用赋值到新变量的栈内存中,所以只是在复制了个对象引用,并没有在堆内存中生成一份新的对象。
let a={name=“pp”};
let b=a; -
当我们给引用类型变量分配一个新对象时,会修改栈内存中的引用,新的引用指向堆内存中新的对象。
a={name=“ππ”}; -
当我们比较引用类型变量时,实际上是比较栈内存中的引用。只有引用相同变量时才相等。
即使看起来完全一样的引用类型变量,只要他们引用的不是同一个值,他们就是不一样。
let a={name:“pp”}
let b={name:“pp”}
a!=b