Javascript-子函数中的布尔全局变量未更改
我正在做一个学生项目:一个“热或冷”的游戏应用程序,但似乎不懂什么Javascript-子函数中的布尔全局变量未更改,javascript,boolean,Javascript,Boolean,我正在做一个学生项目:一个“热或冷”的游戏应用程序,但似乎不懂什么 下面是该项目的链接:用户应该在文本框中输入数字,尝试猜测随机生成的数字。当他猜的时候,游戏结束了。 问题是,当有正确的猜测时,我设置的注册猜测的标志不会永久注册更改(由正确的猜测引起),用户可以继续猜测 当用户做出正确猜测时,我会更改全局变量winflag的值,但由于某些原因,它会返回false(即还没有猜测)并继续游戏 有人能指出为什么会发生这种情况吗? //INSIDE DOCUMENT.READY //global
//INSIDE DOCUMENT.READY
//global variable declaration
var winflag=false;
//event handler for click on guess button
$('#guessButton').click(function(){
event.preventDefault();
if(!winflag) {
console.log("calling guessfunction")
guessfunction();
}
else {
alert("Game is over");
}
});
//END OF DOCUMENT READY
var guessfunction = function () {
//guesscount++ -- write guesscount in #count
guesscount++;
console.log("guesscount is " + guesscount);
//current guess cguess=get the input from the text box
var tcguess = $('#userGuess').val();
var cguess = +tcguess;
//if cguess>100 - alert "not valid input"
if (cguess>100) {
return alert("Not a valid input");
}
else {
//append cguess in #guessList
$('#guessList').append('<li>'+tcguess+'</li>');
//calculatefeedback(solution,cguess)
calculatefeedback(solution,cguess);
console.log("calculated feedback");
}}
var calculatefeedback = function(sol,guess) {
//difference=absolute value(solution-guess)
var difference = Math.abs(solution-guess);
//if difference=>70 --- return you're freezing
if (difference >= 70) {
winflag=false;
return alert("You're freezing!");
}
//else if difference=>30 --- return youre cold
else if (difference >= 30) {
winflag=false;
return alert("You're cold!");
}
//else if difference=>15 --- return youre warm
else if (difference >= 15) {
winflag=false;
return alert("You're warm!");
}
//else if difference=>5 --- return hot
else if (difference >= 5) {
winflag=false;
return alert("You're hot!");
}
//else if difference>=1 --- return burning
else if (difference >= 1) {
winflag=false;
return alert("You're burning!");
}
//else if difference=0 --- return GUESSED
else if (difference == 0) {
winflag=true;
return alert("You guessed!");
}
//else alert "not valid input"
else {
return alert("Not a valid input");
}
//end game
}
//内部DOCUMENT.READY
//全局变量声明
var-winflag=false;
//单击猜测按钮的事件处理程序
$(“#猜测按钮”)。单击(函数(){
event.preventDefault();
如果(!winflag){
log(“调用猜测函数”)
猜测函数();
}
否则{
警惕(“游戏结束”);
}
});
//文件结束准备好了吗
var guessfunction=函数(){
//guesscount++--在#count中写入guesscount
猜数++;
log(“猜测计数为”+猜测计数);
//当前猜测cguess=从文本框中获取输入
var tcguess=$('#userGuess').val();
var cguess=+tcguess;
//如果cguess>100-警告“输入无效”
如果(cguess>100){
返回警报(“非有效输入”);
}
否则{
//在#猜测列表中追加cguess
$(“#猜测列表”).append(“”+tcguess+” );
//计算反馈(解决方案,cguess)
计算反馈(解决方案,cguess);
控制台日志(“计算反馈”);
}}
var calculatefeedback=函数(sol,guess){
//差值=绝对值(溶液猜测)
var差=数学abs(解决方案猜测);
//如果差异=>70---返回您已冻结
如果(差值>=70){
winflag=false;
返回警报(“你冻僵了!”);
}
//如果差值大于30,则返回“你冷了”
否则如果(差异>=30){
winflag=false;
返回警报(“你冷了!”);
}
//否则,如果差值大于15,则返回“你很温暖”
否则如果(差异>=15){
winflag=false;
返回警报(“你热了!”);
}
//如果差值大于5,则返回热态
否则如果(差异>=5){
winflag=false;
返回警报(“你很热!”);
}
//如果差值>=1,则返回燃烧
否则如果(差异>=1){
winflag=false;
返回警报(“你在燃烧!”);
}
//如果差=0,则返回else——猜测返回
else if(差=0){
winflag=true;
返回警报(“你猜对了!”);
}
//else警报“输入无效”
否则{
返回警报(“非有效输入”);
}
//终局
}
如果您正在设置var winflag=false
在$(document).ready(function(){})
中,则不会在全局作用域上设置它。正在文档就绪的范围内设置winflag
。您需要像这样设置它。winflag=false如果您在就绪处理程序中声明winflag
,那么它不是全局的。尝试window[“winflag”]=false代码>取而代之。