模仿通过引用而不是值将数字传递给函数的任何方法

Any way to imitate passing a number by reference, and not value, to a function?

本文关键字:数字 函数 方法 任何 引用      更新时间:2023-09-26

我知道这不是传递原始值的方式,但是最好的方法是什么?有侦听器设置为监视对象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说"盒子"时,他的意思是,把它包裹在一个物体里。对象通过引用传递。喜欢:

var o = {a: [], b: [], n: {"value":5}, m: 6};
function addOneTo(key){
   key.value += 1;
}

编辑:在大多数语言中,没有"通过引用传递"。只有"按值传递"。所以在某种程度上,我上面所说的(javascript 数组是通过引用传递的)是错误的。不同的是按值传递的确切内容。对于基元,传递的值是基元的实际值。对于非基元(数组、对象),值是对象的引用。