Javascript布尔混淆

Javascript Boolean Confusion

本文关键字:布尔混 Javascript      更新时间:2023-09-26

解决了这个问题,但不确定如何解决。感谢回复:)

http://jsfiddle.net/w30cfdqk/

我的布尔值(isSame)保持为真,我不知道为什么。在这个简单的游戏中,当触发时会出现一个鬼魂,这一部分很有效。除非我离开"房间"回来,它会看起来好像鬼不在那里。只有当幽灵最初与玩家在同一房间触发时,布尔值才会在完整代码中正确注册。如果play试图离开,则重影无法重新定位,即布尔值不会与两个int相对应。

releaseGhost();
startTimer();
var isSame = "false";
var ghostLocation;
var mapLocation = 5;
function gameOver() {
    if(isSame === true) {
    gameMessage = "The ghost has killed you. GAME OVER!";
    alert("The ghost has killed you. GAME OVER!");
    document.body.innerHTML = "GAME OVER!";
  } 
} 
//determines if 5 seconds have passed
function moveGhost() {
  ghostLocation = Math.floor(Math.random()*12);
}
function startTimer() {
    if(mapLocation === ghostLocation) {
    isSame = true;
    window.setInterval(gameOver, 5000);
  } else {
    isSame = false;
  }
}
function releaseGhost(){
  ghostLocation = Math.floor(Math.random()*12);
  window.setInterval(moveGhost, 30000);
}
window.setInterval(test, 1000);
function test(){
  	mapLocation = Math.floor(Math.random()*12);
    console.log(isSame, mapLocation, ghostLocation);
  }

您对如何以及何时设置此布尔值的描述有点令人困惑。然而,在我的初始视图中,我可以看到IsSame变量尚未声明。

我只能认为,由于IsSame没有被声明为全局变量,它默认为其默认值,这是错误的。

在代码的顶部,您应该这样声明您的变量:

var isSame = false;

请注意,尽管可以在不首先声明变量的情况下使用变量,但这不是一个好的做法,并且会在不同的浏览器

中引起问题

您的问题在于这个函数

function startTimer() {
  ghostLocation = mapLocation;
  if(mapLocation === ghostLocation) {
    isSame = true;
    window.setInterval(gameOver, 5000);
  } else {
    isSame = false;
  }
}

在第一行中,将mapLocation的值指定给ghosLocation。因此,比较mapLocation === ghosLocation总是true,因此总是运行行"isSame = true",它将值true分配给isSame

在这一点上,您应该重新思考您的代码,并调试您的代码。