JavaScript中reduce方法初始值及箭头函数转普通函数相关疑问
问题1:reduce方法末尾添加的0的作用
这个0是reduce方法的初始值入参,作用是指定归并过程中累计变量total的初始值:
- 传入该初始值时,第一次执行回调函数时
total的取值就是0,遍历会从数组integerSet的第一个元素开始执行 - 未传入该初始值时,
reduce会默认取数组第一个元素作为total的初始值,遍历从数组第二个元素开始执行;如果此时数组为空,会直接抛出类型错误 - 本代码的逻辑是求数组所有元素的指定次幂之和,设置初始值为0可以保证求和逻辑的正确性,哪怕数组为空也能正常返回0,不会报错
问题2:普通函数改写的写法正误
你给出的写法是错误的,存在两处问题:
- 初始值位置错误:你把
0写在了回调函数内部的return语句中,此处触发逗号运算符,最终返回值会是逗号后的0,完全无法得到求和结果 - 变量名不匹配:原代码中幂次变量是
pow,你改写后使用了power,需要和上下文中的实际变量名保持一致
正确的普通函数改写写法如下:
sum = integerSet.reduce(function(total, item) { return total + Math.pow(item, pow); }, 0);
内容的提问来源于stack exchange,提问作者echo
相关产品推荐
相关产品推荐

