HTML游戏脚本最后3行代码未运行 alert弹窗无法触发问题
HTML游戏脚本不弹窗问题排查与修复
问题原因
- 变量条件声明导致引用错误:
level3screen2仅当玩家在Level3的第一个输入框输入right时才会被定义,如果玩家输入up或者其他任意内容,level3screen2为未定义,后续所有判断level3screen2的代码都会触发JS引用错误,脚本直接终止,所以对应的alert不会弹出。 - 逻辑分支遗漏:当玩家在Level3的第一个输入框输入
up时,你将返回值赋值给了level3screen4,但代码中完全没有针对level3screen4的判断逻辑,该分支走通后没有任何后续执行逻辑,自然不会弹出提示。 - 命名冲突风险:你使用了
screen作为变量名,这是浏览器内置的全局对象名,存在命名冲突导致逻辑异常的隐患。
修复方案
修复后完整代码
<script> // 提前声明所有变量,避免条件声明导致的未定义问题 var userInput1, level2Input1, level2Input2, level3Input1, level3Input2; // 替换和内置对象重名的screen变量 userInput1 = prompt("◽◽"); if(userInput1 == "right") { alert("◾◽" + "\n" + "You won!"); } alert("Level 2"); level2Input1 = prompt("◽◾◽"); if(level2Input1 == "left") { level2Input2 = prompt("◽◽◾"); if(level2Input2 == "right") { alert("◽◾◽" + "\n" + "You can't move anymore." + "\n" + "You lost"); } else if(level2Input2 == "left") { alert("◽◾◾" + "\n" + "You won!"); } } alert("Level 3"); level3Input1 = prompt("◾◽" + "\n" + "◽◾"); if(level3Input1 == "right") { level3Input2 = prompt("◾◽" + "\n" + "◾◽"); if(level3Input2 == "right" || level3Input2 == "up") { alert("◾◽" + "\n" + "◾◾" + "\n" + "You won!"); } else if(level3Input2 == "left" || level3Input2 == "down") { alert("You can't move anymore" + "\n" + "You lost"); } } else if(level3Input1 == "up") { // 补全up分支的判断逻辑,可根据你的实际玩法调整规则 level3Input2 = prompt("◽◽" + "\n" + "◾◾"); // 示例规则,可自行修改 if(level3Input2 == "right") { alert("◽◾" + "\n" + "◾◾" + "\n" + "You won!"); } else { alert("You can't move anymore" + "\n" + "You lost"); } } </script>
核心修改点
- 所有变量提前声明,避免条件声明导致的未定义引用错误
- 补全了
up分支的逻辑,走到该分支时也会有对应的提示弹出 - 更换了和浏览器内置对象重名的变量名,避免潜在冲突
- 增加了条件嵌套,避免无关分支的变量被误判断
内容的提问来源于stack exchange,提问作者program
相关产品推荐
相关产品推荐

