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中按值传递。?