reduce 方法
Array.reduce((pre,cur,index, array)=>{
MDN 上对于这个方法的特殊情况做了详细的阐述,但是一般下意识都不去看,老师一般也都没讲。
S1:如果 initVal,传递了, 那么 pre === initValue, cur === array[0];
S2:如果没有传递initVal,那么 pre === array[0], cur === array[1];
S3: 如果数组仅有一个元素,那么 reduce将直接返回数组中仅有的元素。回调不会执行。
S4:如果空数组,但是 传递了 initVal,那么直接返回这个 initVal,回调也不会执行。
$5:空数组,并且initVal 也没有提供,那么 执行 [].reduce(Math.pow) 会抛出类型异常的错误。
}, initVal);
根据上面这个规则可以知道:
// Math.pow(m, n) 用于 幂运算。 等于求 m的 n次方。
[3,2,1].reduce(Math.pow), 于是这里 pre 和 cur 就会被传入, 所以第一次 3的2次方 == 9 =》 pre, 第二次 9的一次方 = 9,最终返回9.
[3].reduce(Math.pow) ===> 3
[].reduce(Math.pow, 3) ===> 3