JavaScript中playerSelection函数递归引发的输入验证异常问题
问题分析与修复方案
问题根源
你写的函数里,递归调用没有更新当前函数的choice变量,导致while循环陷入死循环:
- 第一次输入错误后,进入while循环,触发递归调用
playerSelection() - 递归的函数即使输入正确并返回了值,但当前函数的
choice还是最初的错误值 - while循环的条件永远成立,会一直弹出提示并重复递归调用,直到页面刷新
修复方案
方案一:用循环替代递归(更直观)
直接在循环内重新获取输入并更新choice,不用递归:
function playerSelection() { let choice = prompt("Enter your choice."); while(choice !== "rock" && choice !== "paper" && choice !== "scissor"){ alert("Wrong entry"); choice = prompt("Enter your choice."); // 重新赋值,让循环能判断新输入 } return choice; }
方案二:修正递归逻辑(去掉while循环)
如果坚持用递归,就把while换成if判断,递归调用时直接返回结果:
function playerSelection() { let choice = prompt("Enter your choice."); if(choice !== "rock" && choice !== "paper" && choice !== "scissor"){ alert("Wrong entry"); return playerSelection(); // 递归调用并返回正确结果 } return choice; }
内容的提问来源于stack exchange,提问作者Mahdu
相关产品推荐
相关产品推荐

