深浅拷贝--指针指向的是内存地址

今天遇到一到面试题,脑子短路抽了,迅速做个笔记,看来是这地方有点薄弱

考察的点是:深浅拷贝–指针指向的是内存地址

let obj = { x:1,y:{z:2}}
let obj2 = obj 
let obj3 = obj.y

obj.x = 4;
obj2.y = 9;

obj3.x = 0;

console.log(obj, obj2, obj3)

最终答案是:

{ x: 4, y: 9 } { x: 4, y: 9 } { z: 2, x: 0 }

obj指向的是一块连续的内存区,内存区的内容是{ x:1,y:{z:2}}
obj2指向的也是这块内存区
所以obj obj2俩一个改变另一个也会改变

obj3指向的是一块内存区,内容是{z:2}

obj 与obj2的输出一样就是浅拷贝

obj3指向的这块内存区,后面obj2.y = 9;了之后,obj 与obj2里面的y都改变了,因为obj与obj2指向的连续的内存区改变了,里面已经不包括{z:2}了,本来{z:2}要被内存释放掉的,但是被obj3指到到了,所以obj3还保存着{z:2},并且obj3还往里面加了个x:0

你可能感兴趣的:(前端JS面试题,javascript)