传递函数后不要更改对象

时间:2015-01-07 09:19:22

标签: javascript object constants

myObject = {foo: foo, bar: bar}

function myFunc(obj){
    obj.foo = 'new foo';
}

myFunc(myObject); {foo: 'new foo', bar: bar}

为什么myObject发生了变化?我不想改变它

2 个答案:

答案 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属性告知是否可以更改属性值。