Javascript 有没有办法模仿通过引用而不是通过值向函数传递数字?

Javascript 有没有办法模仿通过引用而不是通过值向函数传递数字?,javascript,object,reference,numbers,primitive,Javascript,Object,Reference,Numbers,Primitive,我知道这不是传递原始值的方式,但最好的方法是什么?有监听器设置为监视对象o,因此我需要n和m在对象o上始终同步,但我还需要number属性递增为变量,以便根据某些因素将不同的值传递给addOneTo var o = {a: [], b: [], n: 5, m: 6}; function push5To(arr){ arr.push(5); } push5To(o.a); o.a[0]; // 5 function addOneTo(num){ num += 1; } addOneTo(

我知道这不是传递原始值的方式,但最好的方法是什么?有监听器设置为监视对象
o
,因此我需要n和m在对象
o
上始终同步,但我还需要number属性递增为变量,以便根据某些因素将不同的值传递给
addOneTo

var o = {a: [], b: [], n: 5, m: 6};
function push5To(arr){
  arr.push(5);
}
push5To(o.a);
o.a[0]; // 5
function addOneTo(num){
  num += 1;
}
addOneTo(o.n);
o.n; // 5 :(

这是因为javascript数组是通过引用传递的<代码>o.a是一个数组
o.n
不是,它是一个简单的数字

一种方法是让函数返回一个值,并将该值赋给
o.n
。或:

function addOneTo(map,key){
  map[key] += 1;
}

addOneTo(o,'n');
另外,当@Phrogz说“box it”时,他的意思是,将它包装在一个对象中。对象是通过引用传递的。比如:

var o = {a: [], b: [], n: {"value":5}, m: 6};

function addOneTo(key){
   key.value += 1;
}


编辑:在大多数语言中,没有“按引用传递”。只有“传递值”。所以在某种程度上,我上面所说的(javascript数组是通过引用传递的)是错误的。不同之处在于通过值传递的是什么。对于基本体,传递的值是基本体的实际值。对于非基本体(数组、对象),该值是对象的引用。

通过闭包是一种方式。否则,将其装箱。这不会直接回答您的问题,但您可以始终返回更新的值,而不是就地修改它。@Phrogz“装箱”?请给出一个使用闭包的例子,好吗?我有一个疑问,除了对象之外,其他对象将在javascript中按值传递。?