代码语言:javascript复制
[1, 2, 3, 4].reduce((x, y) => console.log(x, y))
代码语言:javascript复制A: 1 2 and 3 3 and 6 4
B: 1 2 and 2 3 and 3 4
C: 1 undefined and 2 undefined and 3 undefined and 4 undefined
D: 1 2 and undefined 3 and undefined 4
参考答案: D 解析:
reduce函数接收4个参数: • total (累加器) • currentValue (当前值) • currentIndex (当前索引) • arr (源数组) reduce 函数的返回值将会分配给累加器,该返回值在数组的每个迭代中被记住,并最后成为最终的单个结果值。 reduce函数还有一个可选参数initialValue, 该参数将作为第一次调用回调函数时的第一个参数的值。如果没有提供initialValue , 则将使用数组中的第一个元素。 在上述例子, reduce方法接收的第一个参数(total)是 x, 第二个参数(currentValue)是 y。 在第一次调用时,累加器x为1 , 当 前 值'y'为 2 , 打印出累加器和当前值: 1 和 2。 在第二次调用时,我们的回调函数没有返回任何值,只是打印累加器的值和当前值。如果函数没有返回值,则默认返回undefined。在下一次调用时,累加器为undefined , 当前值为'3',因此undefined和3被打印出来。 在第三次调用时,回调函数依然没有返回值。累加器再次为 undefined , 当前值为“4”。undefined 和 4 被打印出来。 如果改造成以下代码:
代码语言:javascript复制[1, 2, 3, 4].reduce((x, y) => { console.log(x, y); return x y; }, 100)
// 打印
// 100 1
// 101 2
// 103 3
// 106 4