【发布时间】:2018-06-02 18:34:35
【问题描述】:
据我了解,x = { greet: hi } 中的对象引用 x 存储对对象 { greet:hi} 的引用,这与保存实际值的原始类型 (y=10) 不同
在以下代码中,console.log(y) 输出 {greet: "hi"}。
当x obj ref 更新为指向x = {greet: 'hello'} 时,为什么y 对象引用没有更新为指向{greet: 'hello'}
var x = {greet: 'hi'};
var y = x;
x = {greet: 'hello'};
console.log(y);
console.log(x)
【问题讨论】:
-
您所描述的意味着
y = x使y和x的别名,即它们实际上都是同一个变量。这不是它的工作原理。您只是将存储在x中的对象引用分配给y。 -
@deceze 不确定这是否重复。
-
@OP,使用引用分配/复制对象。这意味着,您正在交换内存位置和该内存位置的对象的访问属性。因此,一个变量中的属性变化会反映在其他变量中。现在,当您执行
x = {greet: 'hello'};时,您正在替换引用本身。因此,现在该变量将保存指向其他位置的指针,并且先前位置的对象将保持原样。如果没有人引用它,GC 将摆脱它。 -
@deceze 当然,我检查了提到的问题。虽然这两个问题的性质有一些共同点,但并不完全相同。
-
@Rajesh Meh... 至少这个问题每个月肯定会得到数次回答,而且我们不再需要它的另一个副本。如果您对欺骗目标有更好的建议,请务必......
标签: javascript javascript-objects