Javascript 函数有时会将自身循环成无限循环
Javascript Function sometimes loops itself into an infinite loop
我做了一个while函数,大约一半的时间都可以正常工作。有时,尽管它根本不会加载函数,或者卡在加载函数的下一部分执行其循环之一。据我所知,语法没有任何问题,但我仍然是Javascript的新手。我在代码中看不到任何可能导致自己认为它陷入无限循环的地方。好吧,这是我的代码,如果你能提供帮助,那就太棒了。
var dragHunt = true;
var hitOrMiss = Math.floor(Math.random() * 2);
var dmgOnHit = 0;
var totalDmg = 0;
var playerHealth= 0;
var dragHitOrMiss = Math.floor(Math.random() * 1.5);
var dragDmg= 0;
while(dragHunt){
if(hitOrMiss){
dmgOnHit = Math.floor(Math.random() * 5 + 1);
alert("You hit the dragon, the luck is with you today. You did " + dmgOnHit + " damage!");
totalDmg += dmgOnHit;
if(totalDmg >= 20){
alert("You did it! You have killed the dragon. The hunt was successful!");
dragHunt=false;
}
else{
hitOrMiss = Math.floor(Math.random() * 2);
}
}
else{
if(dragHitOrMiss){
dragDmg = Math.floor(Math.random() * 5 + 1);
alert("The Dragon hit you for " + dragDmg + " damage!");
playerHealth += dragDmg;
if(playerHealth >= 80){
alert("The dragon has burnt you to a crisp. You stood no chance against the ferocious beast.");
dragHunt=false;
}
else{
hitOrMiss = Math.floor(Math.random() * 2);
}
}
}
}
我知道你的问题是什么。你创建了一个无限循环,因为hitOrMiss总是假的,拖着HitOrMiss也是假的。所以,基本上,dragHunt永远不会改变
如果 dragHitOrMiss 实际上是一个常量,则仅在顶部计算。 如果它是假的,并且命中或错过变成假,它们将永远不会被重新计算。当它们都是假的时,你有:
dragHunt = true;
while(dragHunt) {
if (false) {
// not executed
else if (false) {
// not executed
}
}
这是你的无限循环。
如果在顶部将 dragHitOrMiss 计算为 true,则在每次传递中都会重新计算 hitOrMiss,这就是为什么您有时只会有一个无限循环的原因。
编辑:您希望代码看起来更像这样:
while(dragHunt) {
var hitOrMiss = Math.floor(Math.random() * 2);
if (hitOrMiss) {
// The player hit the dragon code here.
} else {
// The Player missed the dragon; it gets a chance to hit the player instead
var dragHitOrMiss = Math.floor(Math.random() * 1.5);
if (dragHitOrMiss) {
// Dragon hit you code here.
}
}
}
每次检查玩家是否击中龙时,您都会计算命中/未命中值。 每次检查龙是否击中玩家时,您都会计算该命中/未命中值。 请注意,hitOrMiss 和 dragHitOrMiss 值不再在 dragHunt 循环之前声明,而是在使用之前实际声明和计算。
相关文章:
- 使用滚动溢出-x进行无限循环
- 超过了最大调用堆栈大小,循环无限
- 从index.html调用函数,该函数无限循环
- 使用jQuery无限循环播放HTML页面幻灯片
- Grunt任务没有加载,获得无限循环
- 如何在不进入无限循环的情况下将网站重定向到Facebook画布URL
- Backbone+RequireJS+Mediator模式导致视图逻辑短路和无限循环
- jQuery无限循环,动画化许多项目
- 如何避免试图用php+jquery显示php起始页的无限循环
- 6502仿真增强型基本无限循环$C000至$E0ED
- Angular ngRoute导致无限循环和堆栈溢出
- Jquery:无限循环和暂停
- 数组数组:无限循环
- MeteorJS使用流星调用和流星方法时的无限循环
- 如何无限循环数据集字符串
- jquery在无限循环中运行
- 遍历对象会导致无限循环
- 为什么内部Javascript循环会阻止外部循环中断(即无限循环)
- 为什么while循环无限循环
- 简单的 do/while 循环无限循环问题