-3

私は困惑しています。これが無限ループを生成する理由を誰かに説明してもらえますか?

var constant = 4;
var stack = new Array();
stack.push(0);
stack.push(1);
loop1();


function loop1(){    
    for(i = 0; i < constant; i++){
        loop2(i);
    }
}

function loop2(num){
    for(i = 0; i < stack.length; i++){
        console.log(i); 
    }
}

フィドル: http://jsfiddle.net/elclanrs/tywV9

Javascript の関数レベル変数のスコープと関係があるのではないかと思いますが、それは私の推測の範囲内です。

4

1 に答える 1

1

varキーワードを使用して変数を宣言しない場合、変数はグローバルであるためloop2loop1同じ(グローバル)i変数を使用しています。loop2が呼び出されるたびに、iは0に設定され、次にstack.length、2まで増分されます。これは、のすべての反復が3でloop1終了するが、4i=2に達するconstantことはないことを意味します。

for (var i = 0; ...)forループをではなくに変更すると、for (i = 0; ...)無限にループすることはなくなります。

于 2012-12-22T23:16:35.510 に答える