2016-08-27 6 views
0

私はこのループをコード内に入れていますが、中括弧なしで正しく動作します(時間をかけて)。forTheScope関数では中括弧では機能しません。理由を知りたいのですか?フィルタメソッドの中括弧の有無にかかわらずループが異なる方法で動作しますか?

function destroyer(arr) { 
// Remove all the values 
a=[]; 
for(var b=0; b<arguments.length; b++) { 
a.push(arguments[b]); 
} 

function forTheScope(item) { 
debugger; 
for (var m = 1; m < a.length; m++) // this for loop works 
    if (item == a[m]) // but when i put curly braces, it doesn't? 
    return false; // 
return true; // 
} 

/*===== This is the for loop with braces ===== 
function forTheScope(item) { 
debugger; 
for (var m = 1; m < a.length; m++) { 
    if (item == a[m]) { 
    return false; 
    } else { 
    return true; 
    } 
} 
} 
========== End of the loop ==========*/ 

return a[0].filter(function filterArray(item,index,array) { 
return forTheScope(item); 
}); 
} 

destroyer([1, 2, 3, 1, 2, 3], 2, 3); 
+3

動作しないコードのバージョンを投稿してください。 '{}}をどのように*追加したかによって決まります。 – Pointy

+0

@Pointy私の編集 – learningjavascriptks

+0

OKを参照してください。答えを更新してください。 – Pointy

答えて

2

このコード:

for (var m = 1; m < a.length; m++) 
    if (item == a[m]) 
    return false; 
return true; 

は、それがこのように書かれているかのようであると解釈され:

for (var m = 1; m < a.length; m++) { 
    if (item == a[m]) 
    return false; 
} 
return true; 

forループヘッダが構文的に単一の文が続いています。そのifステートメントは、その要件を満たします。しかし、全体を{ }にラップすると、も1つの "複合"ステートメントが作成されます。

もちろん、{ }が他の方法で追加された場合は、状況が異なる可能性があります。

編集 —これで、間違ったバージョンを含めるように質問が更新されたので、その違いはわかります。あなたのコードは作業バージョンとは非常に重要な点で異なりますが、実際には{ }とは関係ありません。それは、それが問題だelseことだ:

for (var m = 1; m < a.length; m++) { 
    if (item == a[m]) { 
    return false; 
    } else { 
    return true; 
    } 
} 

あなたは今、それは内部ループの代わりに、外部のだ、else句にreturn trueを移動しました。実際のバージョン、または上記の{ }の私のバージョンでは、ループの外にあるので、ループが完全に終了するまで(ループがreturn false;で最初に終了しない限り)は発生しません。

ご使用のバージョンでは、ループの最初の反復でreturn false;の機能が終了するか、return true;で終了します。ループはその最初の反復よりも何も得られません。

+0

これは、私が関数forTheScope(item){ デバッガを使用したいと希望する中カッコのコードです。 for(var m = 1; m learningjavascriptks

+1

@learningjavascriptks回答が更新されました。 – Pointy

+0

あなたの答えを読んで私は私の質問が愚かであることに気付きました、ありがとうございました!私はそれを感謝します – learningjavascriptks

関連する問題