3

我正在学习 codecademy.com 课程,其中包含编写下面的 calculateTotal 函数的说明。当我单击运行时,它返回 NaN。任何人都知道我编写的 calculateTotal 函数有什么问题,导致它返回 NaN。请注意,我知道 NaN 不是数字...

// runner times
var carlos = [9.6,10.6,11.2,10.3,11.5];
var liu = [10.6,11.2,9.4,12.3,10.1];
var timothy = [12.2,11.8,12.5,10.9,11.1];

// declare your function calculateTotal here
var calculateTotal = function(raceTimes){
    var totalTime; 
    for(i = 0; i < raceTimes.length; i++){
        totalTime += raceTimes[i]; 
        return totalTime; 
    }
};

var liuTotal = calculateTotal(liu);

console.log(liuTotal);

请注意,许多回答这个问题的人都说 var totalTime 必须设置为“O”。但是,在下一个 codecademy 课程中,作者编写了一个未设置 totalTime 的函数,并且它可以工作

var calculateAverage = function (raceTimes) {
  var totalTime;
  for ( i = 0; i < raceTimes.length; i++ ) {
    totalTime = (totalTime || 0) + raceTimes[i];
  }
// assign variable averageTime
var averageTime = totalTime / raceTimes.length; 

  return averageTime;
};
4

3 回答 3

8

两个问题:

  1. totalTime未定义 - 在未定义的结果中添加某些内容NaN
  2. 您正在循环内部返回。

使固定:

var totalTime=0;
for(i = 0; i < raceTimes.length; i++){
    totalTime += raceTimes[i]; 
}
return totalTime; 
于 2012-08-27T21:39:30.193 回答
2

totalTime没有初始值,因此它以undefined. 您不能添加数字undefined并获取数字:

var totalTime; // implicitly initialized to undefined 
for(i = 0; i < raceTimes.length; i++){
    totalTime += raceTimes[i];  // undefined + raceTimes[i] = NaN
    return totalTime; 
}

将其初始化为0.

var totalTime = 0;
于 2012-08-27T21:39:38.927 回答
2

您尚未totalTime使用值进行初始化。所以它默认为undefined. 因此,在每次迭代中,都会添加 undefined ,从而产生NaN.

于 2012-08-27T21:40:04.390 回答