回调函数第一次执行时,accumulator
和currentValue
的取值有两种情况:调用reduce
时提供initialValue
,accumulator
取值为initialValue
,currentValue
取数组中的第一个值;没有提供 initialValue
,accumulator
取数组中的第一个值,currentValue
取数组中的第二个值。
注意:如果没有提供initialValue
,reduce 会从索引1的地方开始执行 callback 方法,跳过第一个索引。如果提供initialValue
,从索引0开始。
如果数组为空且没有提供initialValue
,会抛出TypeError
。如果数组仅有一个元素(无论位置如何)并且没有提供initialValue
, 或者有提供initialValue
但是数组为空,那么此唯一值将被返回并且callback
不会被执行。
[1, 2, 3,4].reduce(function(sum, value,index) {
console.log("sum::"+sum);
console.log("value::"+value);
console.log(1000,index);
return sum + value;
});
sum::1
value::2
1000 1
sum::3
value::3
1000 2
sum::6
value::4
1000 3
10
[1, 2, 3,4].reduce(function(sum, value,index) {
console.log("sum::"+sum);
console.log("value::"+value);
console.log(1000,index);
return sum + value;
},0);
sum::0
value::1
1000 0
sum::1
value::2
1000 1
sum::3
value::3
1000 2
sum::6
value::4
1000 3
10
[1, 2, 3,4].reduce(function(sum, value,index) {
console.log("sum::"+sum);
console.log("value::"+value);
console.log(1000,index);
return sum + value;
},10);
sum::10
value::1
1000 0
sum::11
value::2
1000 1
sum::13
value::3
1000 2
sum::16
value::4
1000 3
20