JS变量都存放在[内存]中,而内存给变量开辟了两块区域,分别为栈区域和堆区域
- 栈会自动分配空间,会自动释放,容量小,速度快。(存取速度快,但是不灵活,用完就释放,内存回收容易实现。)
- 堆会自动分配空间,容量大,但是不会自动释放。(动态存取,灵活,但是存取速度慢。) js一般将基本数据类型存放在栈里面,引用数据类型存放在堆内存中
let a = 123
let b = a
b = 456
console.log(a,b)//123,456
let obj1={name:"ceshi"}
let obj2 = obj1
obj2.name = "xiugai"
console.log(obj1,obj2)//{name:"xiugai"},{name:"xiugai"}
观察上面的代码会发现b的修改并不会影响到a的值,但是obj2的修改影响到了obj1的值。这是因为在在声明b的时候在栈占内存中开辟了一块空间来专门存放b的数据,将a的值赋给b的时候,是把a的值复制并放到b的内存中,他们之间并没有什么联系。而对于obj2,obj1将值赋给它的时候,是把obj1的指针复制给了obj2,两者实际指向的是同一片内存空间。
具体可以参考下面这篇文章 blog.csdn.net/qq_29850249…
问到这个问题应该是想要引出浅拷贝,深拷贝的知识点。