Javascript 为什么是NaN';降低回报率?

Javascript 为什么是NaN';降低回报率?,javascript,reduce,Javascript,Reduce,我故意注释掉了返回值,因为它没有按预期工作。 如果我去掉返回和,它将返回正确的平均值。但这是我不明白的:当它在最后一个索引位置进入if时,返回显示NaN。 但是为什么它会返回NaN const mediaNumeros = numeros.reduce((sum, element, index, array) => { sum = sum + element; if (index == array.length - 1) { return Number((s

我故意注释掉了
返回值
,因为它没有按预期工作。 如果我去掉返回和,它将返回正确的平均值。但这是我不明白的:当它在最后一个索引位置进入if时,返回显示NaN。 但是为什么它会返回NaN

const mediaNumeros = numeros.reduce((sum, element, index, array) => {
    sum = sum + element;
    if (index == array.length - 1) {
        return Number((sum / array.length).toFixed(2));
    }
    // return sum;
}, 0)

让我们假设numeros的值为[8,90,0,7]

让我们看看每个迭代中发生了什么:-

在第一次迭代时: 计算
总和之前

  • 数组:[8,90,0,7]
  • 要素:8
  • 索引:0
  • 总数:0
计算
sum

  • 数组:[8,90,0,7]
  • 要素:8
  • 索引:0
  • 总数:8
如果我们在第一次迭代后不返回
sum

在第二次迭代中: 计算
总和之前

  • 总和:
    未定义
  • 数组:[8,90,0,7]
  • 要素:90
  • 索引:1
注意:Array.prototype.reduce()接受函数(即高阶函数)而不是循环

sum
变得未定义,因为我们没有返回上一个函数调用的值。Js引擎不知道
sum
的值是多少,因为前面的函数已经完成,其执行上下文被删除

计算完
总和后

  • 总和:
    undefined
    +90=
    NaN
  • 数组:[8,90,0,7]
  • 要素:90
  • 索引:1
因此
sum
的值变为NaN


因此它继续计算
sum
的值为NaN。

让我们假设numeros的值为[8,90,0,7]

让我们看看每个迭代中发生了什么:-

在第一次迭代时: 计算
总和之前

  • 数组:[8,90,0,7]
  • 要素:8
  • 索引:0
  • 总数:0
计算
sum

  • 数组:[8,90,0,7]
  • 要素:8
  • 索引:0
  • 总数:8
如果我们在第一次迭代后不返回
sum

在第二次迭代中: 计算
总和之前

  • 总和:
    未定义
  • 数组:[8,90,0,7]
  • 要素:90
  • 索引:1
注意:Array.prototype.reduce()接受函数(即高阶函数)而不是循环

sum
变得未定义,因为我们没有返回上一个函数调用的值。Js引擎不知道
sum
的值是多少,因为前面的函数已经完成,其执行上下文被删除

计算完
总和后

  • 总和:
    undefined
    +90=
    NaN
  • 数组:[8,90,0,7]
  • 要素:90
  • 索引:1
因此
sum
的值变为NaN

因此它继续计算
sum
的值为NaN