加等于操作符每次增加值

3

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

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个回答

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));

4

当你进行操作时

elem += num

在您的函数中,您正在递增传递给函数的参数 elem 所持有的值,而不是该参数值来自的变量。参数 elem 和变量 zero 之间没有链接, zero 在调用 some 时被传递到函数中。


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现在不再是原始值,而是一个数组,而数组是对象,因此是按引用传递的。


2

试试这个:

sum = (function sum(num){
    var zero = 0;
    return function () {
        return zero += num;
    };

})(10);

console.log(sum());
console.log(sum());
console.log(sum());

0

zero = some(zero, 10)

你需要在some()函数中返回新的值,因此在函数调用后必须将其赋值给zero。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接