3

我有大量的变量。计算总和的最正确方法是什么。下面是静态方式。.如果数字会增加到N倍怎么办?

function abc(a,b,c,d){
  alert(a+b+c+d); 
}
abc(2,3,4,5);
4

4 回答 4

4
function abc(){
    return Array.prototype.reduce.call(arguments, function(a,b) {
        return a + b;
    }, 0);
}

.reduce我们可以通过绑定为 的this值来减少冗长.call

var reduce = Function.call.bind([].reduce);

那么它只是:

function abc(){
    return reduce(arguments, function(a,b) {
        return a + b;
    }, 0);
}
于 2013-07-27T19:54:34.740 回答
3

你可以使用arguments

function abc(){
  var total = 0;
  for( var i = 0; i < arguments.length; i++) {
     total += arguments[i];
  }
  alert(total);
}

abc(1, 2, 3, 4, 5, 6, 7);

演示

或者

function abc( args ){
  var total = 0;
  for( var i = 0; i < args.length; i++) {
     total += args[i];
  }
  alert(total);
}
abc([1, 2, 3, 4, 5, 6, 7]);

演示

最好的方法是使用后者。

于 2013-07-27T19:50:58.690 回答
2

要自动接受无限数量的参数,请使用arguments属性

function sum() { // javascript functions can accept more arguments than specified
  var total = 0;
  for (var i = 0; i < arguments.length; i++) {
    total += arguments[i];
  }
  return total;
}

请记住,这实际上可能不会比在原始代码中调用“a + b + c + d”更短或更易读。

于 2013-07-27T19:50:48.933 回答
1

这是使用该Array.reduce()命令的较短版本。

function abc() {
   alert([].reduce.call(arguments, function(a, b) { return a + b; }));
}
abc(2,3,4,5);
于 2013-07-27T20:05:21.023 回答