javascript - 如果JavaScript对象是通过引用传递的,为什么更新属性值不会更新局部变量

标签 javascript object pass-by-reference

对象通过引用传递。它们永远不会被复制。

我有一个代码段如下:

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/

相关文章:

javascript - 如何将 Javascript 反向引用传递给键或函数?

javascript - 在 Fraction Slider 中调整浏览器大小的字体自行调整大小

javascript - 按两个值对其中包含 JS 对象的数组进行排序

r - 你可以在 R 中传递引用吗?

php - Laravel 通过引用事件订阅者传递数组

javascript - 在 Javascript 中通过引用传递字符串

javascript - 小程序上的 Div

javascript - 如何将未知整数划分为给定数量的(几乎)偶数

javascript - 将 JavaScript 对象列表显示为 HTML 列表项

javascript - 如何为 Chart.js 数据提供空值?