当前位置: 首页 > 知识库问答 >
问题:

对象引用是如何在JavaScript中工作的?[副本]

笪栋
2023-03-14

我是JavaScript的新手,我认为对象是通过引用传递的。

我期望的输出是:

{ one: 1 } { one: 1 }
{ two: 2 } { two: 2 }

获得的输出:

{ one: 1 } { one: 1 }
{ two: 2 } { one: 1 }

b引用a的地址时,为什么b仍然{one:1}

null

js lang-js prettyprint-override">var a = {one:1}
var b = a

console.log(a,b)

a = {two:2}

console.log(a,b)

null

共有2个答案

曾嘉荣
2023-03-14

下面我们一一分析一下:

var a = { one: 1 }  // 'a' points now to (example) location: #fff
var b = a        // 'b' points to the same location: #fff

现在,当您将新对象设置为a:

a = { two: 2 }

A现在指向内存中的新位置(例如,#ff1),它不会影响B的位置,它仍然指向#fff。这就是为什么最后一个console.log(a,b)调用会给出{two:2}{one:1}输出。

缑赤岩
2023-03-14

当您执行b=a时,所以现在ba具有相同的引用

但当您为a指定新值时

a = { one : 2 }

它为值({one:2})创建了一个新的内存引用,并用a变量对其进行标记,因此您可以使用a引用内存引用并获取值。但是b仍然保留a的初始引用,该引用的值为{one:1}

 类似资料: