微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决为什么传递给函数的对象可以被突变但不能在javascript中重新分配?

我是Java语言的初学者,只需要澄清一下。我并不是真的想在这里取得任何成就。对此情况有些困惑。

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

以下是我的意思的示例代码

示例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中找到。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。