3

この小さなコードが原因で、無限ループが発生します。ループの前に var i を任意の値 (つまり var i = 0) に宣言すると修正されますが、その理由はわかりません。JavaScript の複雑さに詳しい人が、ここで何が起こっているのか説明してくれませんか?

for (num = 1; num <= 2; num++) {
    for (i = 1; i < num; i++) {
      console.log("hi");
    }
}
4

3 に答える 3

5

iは local として宣言されていないためvar、コードは効果的に変数/オブジェクトwindow.iを変更するだけでなく、window.num

varキーワードを追加すると、問題が解決するはずです。

for (var num = 1; num <= 2; num++) {
    for (var i = 1; i < num; i++) {
      console.log("hi");
    }
}

これは、プログラムが無限ループに陥る理由の質問には答えません。しかし、ぶら下がっているコードが変更しようとしていて、それが別の場所で使用されている可能性があることを知っているだけwindow.iですwindow.num

JavaScript スコープ ルールの詳細については、こちらをご覧ください。

于 2012-05-29T12:33:47.807 に答える
2

コードは問題ないようです。jsFiddleで実際の動作を確認してください

別の注意:javascriptの変数に注意してください。varそれらを宣言するために常に使用する必要があります。彼らがグローバルになることを忘れたら!

于 2012-05-29T12:25:33.113 に答える
1

それは無限であってはなりませんが、これが起こるかもしれないケースです。

var を宣言せずに i にアクセスしているということは、それをローカルではなくグローバル変数として使用していることを意味します。コードを注意深く分析して、ループをいじっているグローバルな 'i' または 'num' を見つけてください。

于 2012-05-29T12:30:40.660 に答える