myObject = {foo: foo, bar: bar}
function myFunc(obj){
obj.foo = 'new foo';
}
myFunc(myObject); {foo: 'new foo', bar: bar}
为什么myObject发生了变化?我不想改变它
答案 0 :(得分:1)
问题是该对象是通过引用传递的。如果您不希望函数修改输入参数,则可以在将对象传递给函数之前对其进行深层复制。或者更好,write pure functions as much as possible – without any side effects.
myObject = {foo: foo, bar: bar}
function myFunc(obj){
obj.foo = 'new foo';
}
myFunc(JSON.parse(JSON.stringify(myObject)));
答案 1 :(得分:0)
您应该在foo
下定义myObject
属性,如下所示。
Object.defineProperty(myObject, 'foo', {
value: '<value u want to put for this object>'
configurable: false,
writable: false,
});
configurable
属性告知是否可以删除该属性,并且可以更改其属性(可写除外)。
writable
属性告知是否可以更改属性值。