在 1 个方法中增加变量值会触发另一个方法的 for 循环,欢迎任何建议

incrementing a variable value inside 1 method triggers off the for loop of another method, any advice welcomed

本文关键字:方法 循环 for 任何建 另一个 增加 变量值      更新时间:2023-09-26

我正在构建一个小的随机序列比较器来学习js对象,目前我遇到了一个问题,如果我在我的completeMessage()中增加限制变量,这将在我的compareSequences()的for循环中自动运行,导致无限循环,谁能告诉我我可能出错的地方?

有问题的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/

默认情况下,您的limit变量是在全局范围内定义的(作为对象window的属性),在一个函数中更改其值会在任何地方更改它。

请务必使用 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;
}