Javascript reduce方法中的累加器是具有名为total的键的对象吗?

Javascript reduce方法中的累加器是具有名为total的键的对象吗?,javascript,Javascript,我在freeCodeCamp的初学者代码中遇到了一些代码: 我知道reduce函数中的累加器对值进行合计,但我被用法acc.total弄糊涂了——好像它是一个包含total键的对象。这是怎么回事 累加器的初始值是传递的第二个参数(或数组中的第一项)。因为第二个参数是在这里传递的,所以累加器或acc,以 { total: 0 } 累加器可以是任何东西,但在本例中,是的,它是一个带有total键的对象 在后续迭代中,累加器是回调的最后一次迭代返回的值。每个回调都有返回acc,因此累加器在每次迭代中

我在freeCodeCamp的初学者代码中遇到了一些代码:


我知道reduce函数中的累加器对值进行合计,但我被用法
acc.total
弄糊涂了——好像它是一个包含
total
键的对象。这是怎么回事

累加器的初始值是传递的第二个参数(或数组中的第一项)。因为第二个参数是在这里传递的,所以累加器或
acc
,以

{ total: 0 }
累加器可以是任何东西,但在本例中,是的,它是一个带有
total
键的对象

在后续迭代中,累加器是回调的最后一次迭代返回的值。每个回调都有
返回acc
,因此累加器在每次迭代中都是相同的对象

该代码(几乎)相当于:

var acc = { total: 0 };
cid.forEach(function(curr) {
  acc.total += curr[1];
  acc[curr[0]] = curr[1];
});
var register = acc; // same object as accumulator

它只是一个带有key total的对象,所以如果您想要的输出是object,那么您可以这样使用它,而不是使用基本值为什么只有几乎相等的值?它看起来像是一个精确的解决方案。唯一的区别在于
acc
的杂质-它的范围现在不仅局限于
内部。reduce
回调(这可能是一个缺点,请参见-
acc
外部,代码非常难以阅读)。如果存在另一个名为
acc
的外部变量,则会出现问题,但这种名称冲突的可能性很小。
var acc = { total: 0 };
cid.forEach(function(curr) {
  acc.total += curr[1];
  acc[curr[0]] = curr[1];
});
var register = acc; // same object as accumulator