将此参数和第二个参数传递给回调函数

时间:2017-05-25 21:43:46

标签: javascript foreach

我有一个JSCS规则,用于标识for循环中的函数。我想要遵守规则vs关闭警告。这是JSCS错误状态中的代码。

let sum = 0;
for (var key in denomGroup) {
    denomGroup[key].forEach(function (denom) {
        sum = addToSum(sum, denom)
    });
}
return sum;

我在下面尝试了这个并且addToSum函数获取了对象,但是我无法弄清楚如何传递总和并让它迭代并继续添加其他值

for (var key in denomGroup) {
    denomGroup[key].forEach(addToSum);
} 

function addToSum(denom, sum) { //denom has object, sum is empty
    return sum += denom.sum;
}

我也试过

for (var key in denomGroup) {
    denomGroup[key].forEach(addToSum(sum));
} 

function addToSum(sum, denom) { //sum has 0, denom is empty
    return sum += denom.sum;
}

如何在第一个代码块的意图下正确调用外部函数?我需要避免将sum作为全局变量放置。

1 个答案:

答案 0 :(得分:2)

您不需要将sum传递给函数,只需在声明sum的范围内声明该函数:

let sum = 0;
let denomGroup = {
  a: [1,2,3],
  b: [4,5,6]
};

function addToSum(denom) {
  return sum += denom;
}

for (var key in denomGroup) {
  denomGroup[key].forEach(addToSum);
}

console.log(sum);

编辑:正如@ScottMarcus指出的那样,sum变量不需要是全局的,只是在与函数定义相同(或更高)的范围内。例如,您可以将整个事件封装起来:

function countDenoms(denomGroup) {
  let sum = 0;

  function addToSum(denom) {
    sum += denom;
  }

  for (var key in denomGroup) {
    denomGroup[key].forEach(addToSum);
  }

  return sum
}

console.log(countDenoms({
  a: [1, 2, 3],
  b: [4, 5, 6]
}));