我故意注释掉了return sum, 因为它没有按预期工作。如果我删除返回总和,它会返回正确的平均值。但这是我不明白的:当它进入最后一个索引位置的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)
1 回答
暮色呼如
TA贡献1853条经验 获得超9个赞
让我们假设 numeros 的值为 [8, 90, 0, 7]
让我们看看每次迭代中发生了什么:-
第一次迭代时: 计算之前sum
数组:[8, 90, 0, 7]
元素:8
索引:0
总和:0
计算后sum
数组:[8, 90, 0, 7]
元素:8
索引:0
总和:8
sum
如果我们在第一次迭代后没有返回:
在第二次迭代时: 计算之前sum
和:
undefined
数组:[8, 90, 0, 7]
元素:90
指数:1
注意:Array.prototype.reduce() 接受一个函数(即它是高阶函数)而不是一个循环。
sum
变得未定义,因为我们没有返回前一个函数调用的值。Js 引擎不知道 的值是什么,sum
因为前一个函数已经完成并且它的执行上下文被删除。
计算后sum
总和:
undefined
+ 90 =NaN
数组:[8, 90, 0, 7]
元素:90
指数:1
所以 的值sum
就变成了 NaN
sum
所以它继续计算NaN的值。
添加回答
举报
0/150
提交
取消