在 1 个方法中增加变量值会触发另一个方法的 for 循环,欢迎任何建议
incrementing a variable value inside 1 method triggers off the for loop of another method, any advice welcomed
我正在构建一个小的随机序列比较器来学习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;
}
相关文章:
- Array方法中的Javascript循环
- 如何在循环中使用jQuery.on()方法,而不覆盖我循环的对象
- 有没有一种方法可以在所有嵌套循环之后放置一个标签,以便在一步中将它们全部打断
- 特定循环(html元素)方法的优点和缺点
- MeteorJS使用流星调用和流星方法时的无限循环
- 使用click()方法是在创建一个无休止的循环
- 在 1 个方法中增加变量值会触发另一个方法的 for 循环,欢迎任何建议
- 循环遍历 DOM 元素时,是否有 for 循环的替代方法
- 在二维数组中搜索比嵌套循环更有效的方法
- 在Raphael JS中创建脉动(循环)背景的最简单方法
- 有没有任何方法可以使这个名称生成循环运行最短的秒数
- 对于许多类似的方法,使用for循环
- 可以't在对象数组上循环时调用公共方法
- Node.js:如何在一个循环中使用回调调用方法
- 在循环中创建函数的最有效替代方法
- 未捕获的类型错误:对象 [对象对象] 在 chrome 中没有方法“循环”
- 未捕获的类型错误:对象[对象对象]在Wordpress网站中没有方法“循环”
- google map addListener方法循环n次
- JS循环插件在IE11中不工作.对象不支持属性或方法循环
- 使用DOM方法循环属性