通过这个和第二个参数回调函数
我有一个JSCS规则,标识for循环内的函数。我想遵守规则与关闭警告。这是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
作为全局变量。
你并不需要将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]
}));
我希望没有'sum'是一个全局变量,如果可能的话 –
@JonHarding它没有必须是全球性的,它可以处于更高的范围。 –
@ScottMarcus完全正确;我已经更新了我的答案以包含详细信息 – Hamms
有关使用'Array.reduce()'和不必担心任何的这个怎么样? https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce –