元芳怎么了
2024-01-18 20:37:36
我故意注釋掉了return sum, 因為它沒有按預(yù)期工作。如果我刪除返回總和,它會返回正確的平均值。但這是我不明白的:當它進入最后一個索引位置的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條經(jīng)驗 獲得超9個贊
讓我們假設(shè) numeros 的值為 [8, 90, 0, 7]
讓我們看看每次迭代中發(fā)生了什么:-
第一次迭代時: 計算之前sum
數(shù)組:[8, 90, 0, 7]
元素:8
索引:0
總和:0
計算后sum
數(shù)組:[8, 90, 0, 7]
元素:8
索引:0
總和:8
sum
如果我們在第一次迭代后沒有返回:
在第二次迭代時: 計算之前sum
和:
undefined
數(shù)組:[8, 90, 0, 7]
元素:90
指數(shù):1
注意:Array.prototype.reduce() 接受一個函數(shù)(即它是高階函數(shù))而不是一個循環(huán)。
sum
變得未定義,因為我們沒有返回前一個函數(shù)調(diào)用的值。Js 引擎不知道 的值是什么,sum
因為前一個函數(shù)已經(jīng)完成并且它的執(zhí)行上下文被刪除。
計算后sum
總和:
undefined
+ 90 =NaN
數(shù)組:[8, 90, 0, 7]
元素:90
指數(shù):1
所以 的值sum
就變成了 NaN
sum
所以它繼續(xù)計算NaN的值。
添加回答
舉報
0/150
提交
取消