Javascript函数有时会将自身循环成一个无限循环
我已经做了一个while函数,它在大约一半的时间内都能正常工作。有时,虽然它根本不会加载函数,或者在加载函数的下一部分时遇到了卡滞,无法执行它的一个循环。就我所见,语法没有问题,但我对Javascript还是新手。我看不到代码中有任何地方会让自己认为自己陷入了无限循环。这是我的代码,如果你能帮忙的话,那就太棒了Javascript函数有时会将自身循环成一个无限循环,javascript,function,loops,Javascript,Function,Loops,我已经做了一个while函数,它在大约一半的时间内都能正常工作。有时,虽然它根本不会加载函数,或者在加载函数的下一部分时遇到了卡滞,无法执行它的一个循环。就我所见,语法没有问题,但我对Javascript还是新手。我看不到代码中有任何地方会让自己认为自己陷入了无限循环。这是我的代码,如果你能帮忙的话,那就太棒了 var dragHunt = true; var hitOrMiss = Math.floor(Math.random() * 2); var dmgOnHit = 0; var t
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和DraghtorMiss总是false。因此,基本上,如果DraghtorMiss实际上是一个常数,仅在顶部计算,那么dragHunt永远不会改变。如果它是假的,赫托密斯变成了假的,它们将永远不会被重新计算。 当它们都为假时,您有:
dragHunt = true;
while(dragHunt) {
if (false) {
// not executed
else if (false) {
// not executed
}
}
这就是你无尽的循环
如果DraghtorMiss在顶部被计算为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和DraghtorMiss值不再在dragHunt循环之前声明,但实际上是在使用前声明和计算的。当
hitOrMiss
和DraghtorMiss
都为false时,问题似乎就出现了。因此,代码所做的是,它生成hitOrMiss和DraghtorMiss作为常量,因为它们只计算一次。我该如何解决这一问题。您需要在使用hitOrMiss值后重新计算(拖动)hitOrMiss值,或者在使用之前生成hitOrMiss值。我将更新我的答案以证明这一点。