javascript - 为什么传递给函数的对象可以改变但不能在 javascript 中重新分配?

标签 javascript function object

<分区>

我是 Javascript 的初学者,只需要一些说明。我并不是真的想在这里取得任何特别的成就。只是对这种情况有点困惑。

当分配给对象的变量作为参数传递给函数时,我们可以永久改变对象。但是,我们不能重新分配它并使更改生效。这是为什么?

下面是我的意思的一些示例代码:

示例 1 - 突变。

const house = {
  color1: 'white',
  color2: 'blue'
};

let paintIt = obj => {
  obj.color1 = 'gold'
};

paintIt(house);

house.color1 // Returns 'gold'

示例 2 - 重新分配。

let house = {
  color1: 'white',
  color2: 'blue'
};

let paintItReassignment = obj => {
  obj = {
    forSale : false,
    includesGarden : true
  }
  console.log(obj) // Prints {'forSale':false, 'includesGarden':true}
};

paintItReassigment(house) // The reassignment does not work
house // Still returns {color1:'white', color2:'blue'}

house = {
 forSale : false,
 includesGarden : true
}; // Regular reassignment still works

为什么当您修改对象属性时它会卡住(示例 1),而当您重新分配它时(示例 2)则不会?

最佳答案

与其他一些编程语言(例如 C)不同,JavaScript 在其函数调用中混合使用了按引用传递和按值传递系统。在函数中,您可以重新分配传递给它的对象的属性,但不能重新分配对象本身的变量。如果您希望重新分配对象变量,您始终可以执行以下操作:

o = f(o);

重新定义多个变量:

var {a,b} = f(a,b)

例如:

function f(a,b){
    return {a:b,b:a};
}

可以找到关于这个主题的一些讨论here .

关于javascript - 为什么传递给函数的对象可以改变但不能在 javascript 中重新分配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63866052/

相关文章:

Javascript 函数返回 undefined variable

javascript - 按键名过滤对象

javascript - 为什么对象嵌套数组中的变量不会改变?

javascript - 如何将值从子功能组件传递给父类组件?

javascript - ReactJS:合并来自 get 请求的 2 个 JSON 响应

javascript - 为什么将复选框的 false 值设置为 'undefined' 会导致添加 ng-invalid

c++ - 如何将同一个对象传递给另一个对象的另一个方法?

javascript - 如何从angularjs中给定的json数据中获取质量率

C、将文件的指针传递给函数

php - 如果 www 之前没有 http,则需要添加 http