对象通过引用传递。它们永远不会被复制。
我有一个代码段如下:
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
我的问题是在我更新了对象人的firstname
之后至Tom
,为什么局部变量fname
还没更新吗?
最佳答案
Javascript 中的值永远不会通过引用传递,而是通过值传递。这些值本身就是对象的引用。
如果您认为函数接收person
,那么即使对象也是按值传递的,这一事实应该很清楚。由于参数只能更改其内容,因此无法替换 person
的整个值多变的。 fname
也是如此。 ,附加限制是字符串是不可变的,这意味着函数接收 fname
的值变量根本无法改变这个变量。
关于javascript - 如果JavaScript对象是通过引用传递的,为什么更新属性值不会更新局部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17352430/