0

for内のタイミングループを破る方法は? 「返す」「割る」「投げる」を試してみました。何も機能していないようです。ループが続くだけです。ラベルを使用しようとすると、エラーが発生します。

キャッチされていない SyntaxError: 未定義のラベル 'breakout'

var r=0;
breakout:
for(i=0;i<5;i++) {
  setTimeout(function() {
    if(r) {
       alert("works");
    } else {
       throw new Error(alert("error"));
       break breakout;
    }
  }, 2000);
}

http://jsfiddle.net/hyc8j/1/

4

4 に答える 4

1

for ループ内で break が機能する限り、機能します。すぐ下で試してみてください。できます

for (i=0;i<10;i++)
  {
  if (i==3)
    {
  alert("Got break");
    break;
    }
  alert("did not break");
  }

setTimeout が非同期関数であるために発生します。JavaScript で setTimeout を同期的に使用するリンクを参照してください

于 2013-05-19T17:02:20.210 に答える
1

この関数には実行の遅延があります... 2 秒後、ループは 5 回の反復をはるかに実行しました。コールバック関数内にループを配置する必要があります。

ちょっと聞いてみたいけど、これで何を意図しているの?

于 2013-05-19T16:53:41.483 に答える
0

あなたのコードとあなたの質問に対する私の理解によると、タイミングループを壊すことはできないと思います.forループを壊したい場合は、あなたのコードでは、タイミングループブロックの外にbreakステートメントを保持してください.

間違っている場合は修正してください。

于 2013-05-19T17:02:32.497 に答える
0

タイムアウト ループに名前を付けます。

次に、これを行います

var yourloop = ... 
clearTimeout(yourloop);

これでループタイムアウトを破ります

于 2013-05-19T17:04:08.040 に答える