如何解决为什么传递给函数的对象可以被突变但不能在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 举报,一经查实,本站将立刻删除。