function reduce2(arr, fn, initial) {
var head = arr[0];
var tail = arr.slice(1);
var last = initial;
if (tail.length > 0)
{
last = reduce2(tail, fn, initial);
}
var index = arr.length;
return fn(last, head, index , arr);
}
这个函好像是统计字符串时出现次数,返回一个对象,那个参数fn
代表什么呢,为什么返回之后的fn就是一个对象呢,这里不理解,哪位大神帮我解释一下这个递归函数,还有那个index是指的每次数组长度还是最初数组长度
其实你问题给得不明确,不过也可以说一下。
fn
明显是一个函数,可以从这一句看出。每次reduce2执行的结果,就是返回的fn(last, head, index, arr)。
我逐行解读一下:
所以对于arr为[a1, a2, a3, ..., an]的情况,要算出
last
的值得先去算[a2, a3, ..., an]的情况,以此类推,最后是[an]。这样就递归完了。这样的递归过程看不出作用,重点要看
fn
是怎么定义的。fn是回调函数,在这个reduce函数执行完毕后调用。index是最初的arr长度
理解一个递归最简单的办法是传几组随机数据 格式要正确 然后把fn传入一个console.log方法 打印所有参数 看执行过程和结果