2017-05-25 11 views
0

forループ内の関数を識別するJSCSルールがあります。私はルールを遵守し、警告をオフにしたいと思っています。これは、JSCSエラー状態のコードです。コールバック関数にこの2番目のパラメータを渡します。

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

どのように? 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);

EDIT:@ScottMarcusが指摘するようにsum変数は、関数定義と同じ(またはそれ以上の)スコープにあるグローバルである必要はありません。あなたは、例えば、ように全体をカプセル化することができます: `Array.reduceを()`使用して、これのいずれかを気にすることない程度

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

関連する問題