为什么 NaN 会减少回报?

我故意注释掉了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)


元芳怎么了
浏览 104回答 1
1回答

暮色呼如

让我们假设 numeros 的值为 [8, 90, 0, 7]让我们看看每次迭代中发生了什么:-第一次迭代时: 计算之前sum数组:[8, 90, 0, 7]元素:8索引:0总和:0计算后sum数组:[8, 90, 0, 7]元素:8索引:0总和:8sum如果我们在第一次迭代后没有返回:在第二次迭代时: 计算之前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就变成了 NaNsum所以它继续计算NaN的值。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript