2011-11-09 10 views
0

私はforループを持っていて、ループ内には別のforループがあり、breakの条件があります。問題は、forループが最上位レベルのループを壊すときにも同じことです。だから、私はどのようにループのためのサブを壊すメインのループのJavascriptを壊すことなくですか?どのように私はJavaScriptのmain forループを壊さずにforループを壊すのですか?

+7

Javascriptでは、内部ループが壊れたときに外部ループが壊れることはありません。あなたのコードがこれをやっているなら、何か他のことが起こっています。 – slebetman

+10

この質問は、投票された質問の重複ではありません - これは、期待される振る舞いがそうでなければ両方のループが壊れる理由です。 OPはコードサンプルを提供する必要があります。 –

答えて

1

は、このように、break文を使用します。最後に、sが5回の全体のループの繰り返しではなく、1の結果が含まれていることを

var i, j, s = ""; 

for(i = 0; i < 5; ++i) { 
    s += "\ni = " + i; 
    for(j = 0; j < 999; ++j) { 
     s += "\nj = " + j; 
     if(j === 1) { 
      break; 
     } 
    }  
} 

お知らせ。

ので、余分な見当違いセミコロン、かもしれないあなたの問題の1つの原因:上記の場合

var i, j, s; 
s = ""; 
for(i = 0; i < 5; ++i) { 
    s += "\ni = " + i; 
    for(j = 0; j < 10; ++j); { 
     s += "\nj = " + j; 
     if(j === 10) { 
      break; 
     } 
    }  
} 

、forループの内側には、実際には空ですが、インデントは、それは次のものが含まれているかのように見えますブロック(実際には "外側"ループの直接の子)です。これは、明らかな「外側」ループが最初の反復で壊れることを意味します。

もう一つの原因は、このように、平等対割り当ての誤用につながるタイプミスかもしれません。このような状況で

var i, j, s; 
s = ""; 
for(i = 0; i < 5; ++i) { 
    s += "\ni = " + i; 
    for(j = 0; j < 10; ++j) { 
     s += "\nj = " + j; 
     if(i = 5) { 
      break; 
     } 
    }  
} 

、破るために内部ループが発生する条件は、外側のループ変数にループには外側のループを終了させる値が割り当てられています。割り当ては真実であるため、ブレークは常にヒットします。

さらに別の原因は、javascriptの変数範囲に関する誤解の可能性があります。他の言語では、このような何かを行うことができるかもしれない:ここ

var i, s = ""; 
for(i = 0; i < 5; ++i) { 
    s += "\nouter = " + i; 
    if(true) { 
     var i; 
     for(i = 0; i < 999; ++i) { 
      s += "\ninner = " + i; 
      if(i === 10) { 
       break; 
      } 
     } 
    }  
} 

トラブルはJavaScriptでは、変数はそれらがvarで宣言された関数にスコープされていることです。 (または、関数の外にある場合、またはvarなしで使用されている場合はグローバル)。これは、内側ループのiが実際には外側ループと同じiであることを意味します。

関連する問題