2

我想这是一个新手问题,但我似乎无法弄清楚。我有这个来自雄辩的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);
}

我想不通的是,每次调用函数时总共存储的零数量是多少?为什么它保持一个正在运行的标签,而不是每次都被消灭?

4

1 回答 1

2

的结构reduce是它应用一个f接受两个操作数的函数 - 这里称为elementtotal到一个序列。element是序列(数组)中的下一个未处理项;total是上一次调用的结果f

概念上reduce(f, 0, [1,2,3])扩展为f(3,f(2,f(1,0).

现在,回答您的问题:运行total存储在counter变量baseinside的调用之间reduce

于 2013-08-27T18:02:41.643 回答