JavaScript:函数返回NAN

时间:2012-08-27 21:37:17

标签: javascript

我正在编写一个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 lessson中,作者写了一个函数,其中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;
};

3 个答案:

答案 0 :(得分:7)

两个问题:

  1. totalTime未定义 - 在NaN
  2. 中向未定义的结果添加内容
  3. 你正在返回INSIDE你的循环。
  4. 修正:

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

答案 1 :(得分: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;

答案 2 :(得分:2)

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