为什么 NaN 会减少 return?

Why NaN's reduce return?

我故意注释掉了 return sum,因为它没有按预期工作。 如果我删除 return 总和,它 return 就是正确的平均值。但这是我不明白的:当它在最后一个索引位置进入if时,这个return显示NaN。 但为什么它 return 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]

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

第一次迭代: 在计算 sum

之前
  • 数组:[8, 90, 0, 7]
  • 元素:8
  • 索引:0
  • 总数:0

计算后sum

  • 数组:[8, 90, 0, 7]
  • 元素:8
  • 索引:0
  • 总数:8

如果我们在第一次迭代后不return sum

第二次迭代: 在计算 sum

之前
  • 总和:undefined
  • 数组:[8, 90, 0, 7]
  • 元素:90
  • 索引:1

注意:Array.prototype.reduce() 接受函数(即它是高阶函数)而不是循环

sum 变为未定义,因为我们没有 return 上一个函数调用的值。 Js 引擎不知道 sum 的值是什么,因为前面的函数已经完成并且它的执行上下文被删除。

计算后sum

  • 总和:undefined + 90 = NaN
  • 数组:[8, 90, 0, 7]
  • 元素:90
  • 索引:1

所以sum的值变成NaN

所以它继续计算 sum 的值作为 NaN。