1

js オブジェクトを学習するために小さなランダム シーケンス コンパレーターを作成しています。無限ループで、どこが間違っているのか誰か教えてもらえますか?

問題の2つの方法:

compareSequences: function() {                
    var instance = this;
    var i = 0;

    for( i; i <= limit; i++ ) {
        console.log('Limit inside loop:', limit);

        if( stacks.randomSequence[i] != stacks.userSequence[i] ) {
            instance.errorMessage();
            return;
        }                 

        if( i === limit ) {
            instance.completeMessage();
        }

        console.log('Limit now', limit);
    }               
},

completeMessage: function() {
    var instance = this;
    alert('Well done you where right!');
    limit = 5; //currently set as test, changing to ++ results in infinite loop
    instance.selectors.startButton.removeAttr('disabled');
    overallScore++;
    instance.selectors.scoreCounter.html(overallScore);
},

私のフィドルへのリンク: http://jsfiddle.net/FNd79/22/

4

1 に答える 1

2

変数limitは、デフォルトでグローバルスコープで(オブジェクトのプロパティとしてwindow)定義されています。1つの関数で値を変更すると、どこでも変数が変更されます。

を使用して、クラスのローカルとして定義してくださいvar

問題は、ループを終了するたびに上限が1ずつ増えるように、ループ中に上限を変更することです。

ループを開始するときにグローバル値が必要です。そのときにローカル変数にコピーするだけです。

compareSequences: function() {                
  var instance = this;
  var i = 0;
  var max = limit;
  for( i; i <= max; i++ ) {
      ...
  }
  ...
}

または、キーワードbreakを使用してループを確実に終了することもできます。

if( i === limit ) {
  instance.completeMessage();
  break;
}
于 2012-08-08T13:24:36.207 に答える