内存分为栈内存与堆内存
一、基本数据类型(number、string、boolean、null、undefined)
每定义一个变量就会在栈里面
开辟一块新的内存空间
let a = 123
let b = a
a = 456
console.log(a) // 456
console.log(b) // 123
基本数据类型是在栈内存中存储的
二、引用数据类型
复杂数据类型在声明之后, 会在堆内存
中开辟出一块空间, 用来存放数据, 拿对象举例, 在我们新建一个对象之后, 会在堆内存中开辟一块空间, 用来存放对象里的数据, 而复杂数据类型跟简单数据类型的不同点
就是在于, 简单数据类型的变量指向的是内存中的数据
, 而复杂数据类型指向的是其在内存中的地址
,通过这个地址, 从而拿到地址中的数据, 因此, 如果将一个对象赋值给另一个对象的时候, 其实是把这个对象在内存空间中的地址传递给了另一个对象
, 此时, 他们共享内存中的同一块空间以及空间里的数据
, 如果对其中一个对象的一个属性进行修改的话, 那么因为两个对象是共享一块地址一个数据的, 因此另一个对象中的属性也会被改变. 如果对其中一个对象重新赋值的话, 那么这个对象就会指向另一块内存空间, 就不在与另一个对象共享同一块内存了。
let obj = { name: '张三' }
let obj1 = obj
obj1 = { name: '李四' }
console.log(obj.name) // 李四
console.log(obj1.name) // 李四
引用数据类型的实例存储在堆中, 其相关变量存储在栈中。 不同的变量可以指向堆中的同一实例