我想这是一个新手问题,但我似乎无法弄明白。我有这个代码,来自雄辩的javascript,关于reduce函数:
function forEach ( info, func ) {
for ( i = 0; i < info.length; i++) {
func(info[i]);
}
}
function reduce (combine, base, array) {
forEach(array, function(elem) {
base = combine(base, elem);
console.log("The base is: " + base);
});
return base;
}
function countZeroes(array) {
function counter(total, element) {
console.log("The total is: " + total);
return total + (element === 0 ? 1 : 0);
}
return reduce(counter, 0, array);
}
我无法弄清楚的是,通过函数的每次调用,总共存储零的数量是多少?为什么它会保持运行选项卡,而不是每次都被清除?
答案 0 :(得分:2)
reduce
的结构是它应用了一个函数f
,它将两个操作数 - 这里称为element
和total
一个序列。 element
是序列(数组)中的下一个未处理项; total
是之前调用f
的结果。
概念上reduce(f, 0, [1,2,3])
扩展为f(3,f(2,f(1,0)
。
现在,要回答您的问题:正在运行total
存储在counter
内变量base
的{{1}}调用之间。