javascript在forEach中使用return

javascript在forEach中使用return,javascript,Javascript,我不确定问题标题是否正确,但我只是在尝试使用此函数时遇到了问题 在第一个示例中,所有输出都是NaN,但在第二个示例中,代码正常工作。我不明白为什么第一个不能工作,是什么导致了不同的结果 希望你能帮助我 非常感谢 //1 function sum(...rest) { var sum=0; sum+=rest.forEach(function (value){ return value; }); return sum; } sum(); sum(1); su

我不确定问题标题是否正确,但我只是在尝试使用此函数时遇到了问题

在第一个示例中,所有输出都是
NaN
,但在第二个示例中,代码正常工作。我不明白为什么第一个不能工作,是什么导致了不同的结果

希望你能帮助我

非常感谢

//1

function sum(...rest) {
   var sum=0;
   sum+=rest.forEach(function (value){
      return value;
   });
   return sum;
}

sum();
sum(1);
sum(2,3);


//2

function sum(...rest) {
   var sum=0;
   rest.forEach(function (value){
      sum+=value;
   });
   return sum;
}

sum();

sum(1);
sum(2,3);

您不能像第一个示例中那样使用
forEach

您需要的是
Array.prototype.reduce

可以从迭代中累积值,如下所示:

function sum(...rest) {
  return rest.reduce(function(result, item) {
    return result += item;
  });
}

forEach
不返回值

如果您想要这种行为,最好使用:

function sum(...rest) {
   return rest.reduce(function(prev, next) { return prev + next; });
};
您可以使用
map()
函数获取每个元素的总和。通过
参数
变量获取动态参数

函数和(){
var总和=0;
var args=[];
对于(参数中的i)args.push(参数[i]);
如果(参数长度>0){
总和=参数减少(函数(总计,值){
返回总+值;
});
}
回报金额;
}
log(sum());
控制台日志(总和(1));
控制台日志(总和(1,2,3))
是一个函数,它只返回1
未定义
,无论函数在函数中运行多少次。所以你基本上是在总和后面加上1
undefined


您可以使用与类似的函数,只是它在迭代所有项后返回结果。

这里是
sum()
函数的一个实现,使用并添加一个等于零的初始值:

let sum=(…rest)=>rest.reduce((结果,值)=>result+value,0);
log(sum());
控制台日志(总和(1));
控制台日志(总和(1,2,3));
控制台日志(总和(-3,-5))可以与箭头函数和开始值一起使用

var总和=(…rest)=>rest.reduce((a,b)=>a+b,0);
log(sum());
控制台日志(总和(1));

控制台日志(总和(2,3))
阅读的文档我在发布后10秒就删除了它,因为我仔细阅读了它。@user2415266,谢谢。我应该先这么做。为什么不使用“Rest参数”?@Arnial,根据示例,OP需要函数中传递的所有参数的总和。。但他误解了如何使用动态参数您的代码有一个错误:“Uncaught SyntaxError:Unexpected token)”感谢@Yosvellquintero现已修复。感谢Davin,我没有研究forEach()以了解其返回值是我的错。