版本1:
var c = [ '##' ]
console.log(c.reduce(function(a,b){
return b.length
}, 0)) // 2
第2版:
var c = [ '##' ]
console.log(c.reduce(function(a,b){
return b.length
})) // "##"
我只是好奇为什么长度方法不起作用,如果我没有提供初始值,你可以在版本2中看到?
在这种情况下,有人能告诉我为什么我需要提供长度方法的初始值才能工作?
答案 0 :(得分:4)
第一次调用回调时,previousValue和currentValue可以是两个值之一。如果在reduce的调用中提供了initialValue,则previousValue将等于initialValue,currentValue将等于数组中的第一个值。
在版本#1中,提供了initialValue
。因此,根据文档,previousValue
被指定为initialValue
所以,对于第一次迭代:
previousValue = initialValue
previousValue = 0
nextValue
是数组中的第一个元素。
nextValue = '##'
所以,返回值为2。
如果数组为空并且未提供initialValue,则抛出TypeError。 如果数组只有一个元素(无论位置如何)并且没有提供initialValue,或者提供了initialValue但数组为空,则返回solo值而不调用回调。