Newb:为什么这个变量会持续而不是重置?

时间:2013-08-27 17:55:33

标签: javascript functional-programming

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

我无法弄清楚的是,通过函数的每次调用,总共存储零的数量是多少?为什么它会保持运行选项卡,而不是每次都被清除?

1 个答案:

答案 0 :(得分:2)

reduce的结构是它应用了一个函数f,它将两个操作数 - 这里称为elementtotal一个序列。 element是序列(数组)中的下一个未处理项; total是之前调用f的结果。

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

现在,要回答您的问题:正在运行total存储在counter内变量base的{​​{1}}调用之间。