加上等于操作员每次增加价值

时间:2012-12-08 16:32:38

标签: javascript

我确信这很简单,但我似乎无法让它正常工作。这是我的代码:

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

5 个答案:

答案 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()中返回新值。所以你必须在函数调用后将它指定为零。

相关问题