猿问

先console.log(obj),后给obj添加属性,为什么可以打印出属性?

先看一段代码:


var obj={b:2};

console.log(obj.a);

console.log(obj);

obj.a=1;

console.log(obj);

这三个 console.log() 分别输出如下结果:


第一个 undefined 我可以理解,但是第二个为什么可以输出 a:1,而且还可以看出第二个和第三个打印的结果有个明显区别:第一个大括号里只有 b:2,而第二个全部输出。


求大神解惑?


慕侠2389804
浏览 858回答 2
2回答

白板的微信

我觉得可能是,你不展开的时候,上面就是显示当时结果字面量输出了,你展开了,下面这个就指向了这个obj的内存地址,里面确实多了一个a属性了

Cats萌萌

背后逻辑应该类似这样:let 简版快照=JSON.parse(JSON.stringify(obj));//返回一个新对象,相当于老对象的快照let 详情快照=JSON.parse(JSON.stringify(obj));//返回一个新对象,相当于老对象的快照如果你现在访问了详情,详情快照就确定了,后面不变了,如果你放着,后面再访问,详情快照就暂时没有值,等你加了一个属性,这个时候,再访问前面的,这个时候,前后两个都会执行JSON.parse(JSON.stringify(obj))那么这个时候的结果当然是一样的,也就是出现同步;图解:
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答