我确信这很简单,但我似乎无法让它正常工作。这是我的代码:
var zero = 10;
function some(elem, num) {
return elem += num;
}
console.log(some(zero, 10));
console.log(some(zero, 10));
console.log(some(zero, 10));
根据我的理解,我期待zero
中的变量每次增加10 ..所以,它将是10,20和30.相反,我一直得到10.显然,这不是'对。
我的问题是,如何将变量zero
每次增加10并将该值保存回变量zero
?
答案 0 :(得分:9)
JavaScript按值传递,因此修改传递的值不会对调用者的变量产生任何影响。您需要使用返回值:
var zero = 10;
function sum(elem, num) {
return elem + num;
}
console.log(zero = sum(zero, 10));
console.log(zero = sum(zero, 10));
console.log(zero = sum(zero, 10));
答案 1 :(得分:4)
当你这样做时
elem += num
...在你的函数中,你正在递增传递给函数的elem
参数所持有的值,不是参数值来自的变量。参数elem
与变量zero
之间没有任何关联,zero
的值,从调用some
开始,传递进入功能。
答案 2 :(得分:2)
像数字这样的原语是通过值传递的,而不是通过引用传递的。这意味着您增加了本地elem
变量,而不是zero
变量。
因此,您需要 - 在函数外部 - 在每次调用函数后重新分配zero
:
console.log(zero = some(zero, 10));
或者,将对象的属性设为零,传递对象。对象通过引用传递,而不是值。所以,例如:
var zero = [10]
function some(elem, num) {
return elem[0] += num;
}
console.log(some(zero, 10));
console.log(some(zero, 10));
console.log(some(zero, 10));
那是因为zero
nows不是基元,而是数组,数组是对象,因此通过引用传递。
答案 3 :(得分:2)
试试这个:
sum = (function sum(num){
var zero = 0;
return function () {
return zero += num;
};
})(10);
console.log(sum());
console.log(sum());
console.log(sum());
答案 4 :(得分:0)
zero = some(zero, 10)
您在some()中返回新值。所以你必须在函数调用后将它指定为零。