2017-05-25 38 views
0

我有一個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作爲全局變量。

+0

有關使用'Array.reduce()'和不必擔心任何的這個怎麼樣? https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce –

回答

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] 
 
}));

+0

我希望沒有'sum'是一個全局變量,如果可能的話 –

+2

@JonHarding它沒有必須是全球性的,它可以處於更高的範圍。 –

+0

@ScottMarcus完全正確;我已經更新了我的答案以包含詳細信息 – Hamms

相關問題