この小さなコードが原因で、無限ループが発生します。ループの前に var i を任意の値 (つまり var i = 0) に宣言すると修正されますが、その理由はわかりません。JavaScript の複雑さに詳しい人が、ここで何が起こっているのか説明してくれませんか?
for (num = 1; num <= 2; num++) {
for (i = 1; i < num; i++) {
console.log("hi");
}
}
この小さなコードが原因で、無限ループが発生します。ループの前に var i を任意の値 (つまり var i = 0) に宣言すると修正されますが、その理由はわかりません。JavaScript の複雑さに詳しい人が、ここで何が起こっているのか説明してくれませんか?
for (num = 1; num <= 2; num++) {
for (i = 1; i < num; i++) {
console.log("hi");
}
}
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 スコープ ルールの詳細については、こちらをご覧ください。
コードは問題ないようです。jsFiddleで実際の動作を確認してください。
別の注意:javascriptの変数に注意してください。var
それらを宣言するために常に使用する必要があります。彼らがグローバルになることを忘れたら!
それは無限であってはなりませんが、これが起こるかもしれないケースです。
var を宣言せずに i にアクセスしているということは、それをローカルではなくグローバル変数として使用していることを意味します。コードを注意深く分析して、ループをいじっているグローバルな 'i' または 'num' を見つけてください。