这段代码有什么问题?

function range(start, end){
  var arrayRange = [];
  for(i= start; i<=end; i++){
    arrayRange.push(i)
  }
  return(arrayRange);
}
var r = range(1,10);
console.log(r);

function sumRange(sumArray){
  var total = 0;

 for(var i=0; i <= sumArray.length; i++){
   total = total + sumArray[i];
 }
  return total;
}

var s=sumRange(r);
console.log(s);

这是在控制台中显示的内容。
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
NaN

我正在尝试 Eloquent Javascript 的练习来理解回调函数。我的目标是生产这个
console.log(sum(range(1,10)));
// 55

最佳答案

问题是 i <= sumArray.length ,数组索引从 0 到 length -1 所以循环条件应该是 i < sumArray.length
在您的情况下,循环的最后一次迭代将是 total + undefined 它将返回 NaN

function sumRange(sumArray) {
    var total = 0;
    for (var i = 0; i < sumArray.length; i++) {
        total = total + sumArray[i];
    }
    return total;
}

你可以使用 Array.reduce() 像
function sumRange(sumArray) {
    return sumArray.reduce(function (sum, val) {
        return sum + val;
    }, 0);
}

关于javascript - 数组中数字范围的总和(回调函数),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30749228/

10-10 13:11