If JavaScript objects passed by reference, why update property value won't update local variable
本问题已经有最佳答案,请猛点这里访问。
对象通过引用传递。它们从不被复制。我有如下代码段:
1 2 3 4 5 6 7 8 9 10 11 12 13 | var person={firstname:'John', lastname:'Smith'} var anotherPerson=person anotherPerson.nickname='Curly' console.log(person.nickname) "Curly" var fname=person.firstname console.log(fname) "John" person.firstname = 'Tom' console.log(anotherPerson) Object {firstname:"Tom", lastname:"Smith", nickname:"Curly"} console.log(fname) "John" <-- fname is not updated |
我的问题是,在我将对象的名字更新为"tom"之后,为什么本地变量fname没有更新?
javascript中的值从不通过引用传递,而是通过值传递。这些值本身就是对象的引用。
如果您认为接收
它是通过值传递的,而不是通过引用传递的。
Objects are passed around by reference.
与其他一些答案相反,它与类型是否是原始类型无关。
一步一步地进行(删除无关行),使用-->表示"引用":
1 2 3 4 | var person={firstname:'John', lastname:'Smith'} // person.firstname -->"John" var fname=person.firstname // fname -->"John" person.firstname = 'Tom' // person.firstname -->"Tom" console.log(fname) // fname still -->"John" |
如果你那么做了:
1 | fname = 'Bob' |
那么fname现在指的是"bob"。fname是您创建的引用,它引用了person.firstname引用的对象。更改person.firstname引用的内容不会更改fname引用的内容。
1 | var fname=person.firstname; // here fname is a string, not an object |
您对Person所做的任何更新都不会反映在fname中,因为它是一个基元类型,而不是一个对象。