当我运行该程序时,我最终以NaN结尾;不胜感激,不胜感激!我感到奇怪,它必须与范围有关

https://jsfiddle.net/Smuggles/evj46a23/

var array = []

var range = function(start, end) {
  for (var count = start; count <= end; count++) {
    array.push(start);
    start += 1;
  }
  console.log(array);
}

var sum = function() {
  var result = 0
  var arrayLength = array.length
  for (var count = 0; count <= arrayLength; count++) {
    result += array[count]
    console.log(result);
  }
}

console.log(sum(range(1, 10)));

最佳答案

2件事:


您需要将for函数中的sum循环更改为< arrayLength而不是<= arrayLength。您正在处理以0索引开头的数组长度。
您需要从sum函数返回结果




var array = [];

var range = function(start, end) {
  for (var count = start; count <= end; count++) {
    array.push(start);
    start += 1;
  }
};

var sum = function() {
  var result = 0;
  var arrayLength = array.length;
  for (var count = 0; count < arrayLength; count++) {
    result += array[count];
  }
  return result;
};

console.log(sum(range(1, 10)));





给定一个[4,5,6]数组,索引将如下所示:

0: 4
1: 5
2: 6


因此,当您使用数组的长度属性(3)时,您引用的索引不存在,该索引返回undefined。它尝试对未定义进行数学运算,从而导致NaN。这就是为什么必须使用< arrayLength的原因。



功能方法:

这将有助于使这些功能更加“纯净”。无需维护函数外部的状态(使用var array = []),只需从函数返回值即可:例如,请参见以下内容:



function range(start, end) {
  var arr = [];
  for (var i = start; i <= end; i++) {
    arr.push(i);
  }
  return arr;
}

function sumArray(array) {
  return array.reduce(function(a, b) {
    return a + b;
  });
}

console.log(sumArray(range(1, 10)));





每个函数都带有参数,并仅返回结果。这样,您就可以更加“实用”了。

09-12 17:39