传递函数后不要更改对象

don't change object after passing function

本文关键字:对象 传递函数      更新时间:2023-09-26
myObject = {foo: foo, bar: bar}
function myFunc(obj){
    obj.foo = 'new foo';
}
myFunc(myObject); {foo: 'new foo', bar: bar}

为什么myObject会改变?我不想改变它

问题是对象是通过引用传递的。如果不希望函数修改输入参数,则可以在将对象传递给函数之前创建对象的深层副本。或者更好的是,尽可能多地编写纯函数 - 没有任何副作用。

myObject = {foo: foo, bar: bar}
function myFunc(obj){
    obj.foo = 'new foo';
}
myFunc(JSON.parse(JSON.stringify(myObject)));
您应该在

myObject下定义foo属性,如下所示。

Object.defineProperty(myObject, 'foo', {   
  value: '<value u want to put for this object>'
  configurable: false,
  writable: false,
});

configurable 属性指示是否可以删除属性以及是否可以更改其属性(可写属性除外)。

writable 属性指示是否可以更改属性值。