9

仕事中のプロジェクトのために、別の開発者の Javascript をデバッグ中です。

私はおそらく中レベルの Javascript 開発者で、良い日には for ループが壊れているように見えます。

for(i = 0; ; i++)

これが本当に間違いなのか、それとも場合によってはこれが高度なことを行うのに完全に有効な方法なのか、誰か教えてもらえますか?

4

5 に答える 5

4

それは問題なく、完全に合法です。ステートメント内の 3 つのスロットはどれもfor空のままにすることができます。私が追加した条件を除いて、論理的にはこれと同じです:

i = 0;
while (true) {
    // other code here
    if (some condition) {
        break;
    }
    i++;
}

ループのどこかにループを停止する条件でステートメントを発行するテストがない限り、無限ループにbreakなります (コード例にサンプル テストを追加しました)。

于 2012-06-20T04:38:04.260 に答える
3

それは有効です。for ループ内の 3 つの式はそれぞれfor(expr1; expr2; expr3)空にすることができます。たとえばfor( ; ; )、 と同じことですwhile(true)

expr1ループ開始直前に一度だけ実行される式です。コードにある式の代わりに、ここに変数宣言ステートメントを含めることもできます。
expr2ループの各反復の直前に実行される式であり、式の値が偽の場合、ループは終了します。式が省略された場合、それは真であると見なされます。
expr3ループの各反復の直後に実行される式です。

あなたが持っているステートメントは本質的にループです(変数を使用して反復する回数をカウントwhile(true)するステートメントをどこかに含める必要があります。breaki

于 2012-06-20T04:37:15.333 に答える
1

インクリメント カウンタを使用して無限ループを実行することは有効な方法です。それが意図的かどうかはまったく別の問題です。そのため、私は個人的に、そのような奇妙なケースで for ループを使用することに反対しています。コメントは明らかにそのような使用法の問題を修正します

于 2012-06-20T04:37:24.670 に答える
1

breakループ内にステートメントがある限り、まったく問題ありません。

break ステートメントがない場合、JavaScript ランタイムはループ内のコードを何度も何度も実行し続け、「i」がどんどん大きくなっていきます。すぐに、「i」は何よりも大きな数字になります。あなたが学校で知っていた金持ちの子供が彼のプレイルームに持っていたレゴの数よりも大きい. それをはるかに超えて、世界のアリの数、スターバックスの数、海の水の分子の数よりも大きな数になります。ある時点で、ブラウザーはスクリプトを停止するかどうかを尋ねるかもしれませんが、興味があり、未知のものを探索するのが好きな人であれば、申し出を断って手放します。もうすぐ「i​​」の値が本当に天文学的な値に達し、物事が面白くなるでしょう。方法を覚えておいてください2001 A Space Odyssey男が木星か何かに吸い込まれたとき、物事は奇妙になりましたか?まぁそういうことかもしれません。

jsfiddle を試してください。

于 2012-06-20T04:36:16.843 に答える
0

ループの構文は単純です。

  1. 変数宣言 => i=0
  2. ループ入口チェック =>
  3. 別のループを作成する => i++

JavaScriptは何も返さずに true を返すため(間違っていたら訂正してください)、ループ開始チェックは常に trueです。

これはまったく良い習慣ではありません。したがって、これは壊れたコードであると強く信じています。設計による無限ループの例を見たことがありません。

于 2012-06-20T04:41:55.400 に答える