如何让JS函数的prompt返回值复用在多if判断中避免重复弹窗?
解决重复调用prompt导致的多次输入问题
问题分析
你的核心问题是在game()函数的循环中,每次if和else if判断都调用了play(),这意味着当输入'soup'时,第一次调用play()拿到值后进入else if分支,又会再次调用play()弹出新的输入框,导致电脑得分需要多次额外输入,逻辑完全混乱。
解决方案
只需要在循环开始时调用一次play(),把用户输入的值存储到变量中,后续所有判断都复用这个变量即可。同时修正while循环的终止条件(原条件playerScore <4 || compScore <4不符合“先到3分获胜”的逻辑)。
修改后的完整代码:
function play(){ let user = prompt('say something: '); return user; } function game(){ let playerScore = 0; let compScore = 0; // 只要双方都没到3分,就继续循环 while (playerScore < 3 && compScore < 3){ // 只调用一次play(),把输入值存起来 const userInput = play(); if (userInput == 'cheese'){ ++playerScore; console.log('player score: ' + playerScore); } else if (userInput == 'soup'){ ++compScore; console.log('compScore: ' + compScore); } // 处理无效输入,避免无意义循环 else { console.log('请输入cheese或soup'); } if (playerScore == 3){ console.log('Player Wins!'); return; } else if (compScore == 3){ console.log('Computer Wins!'); return; } } } game();
关键修改点
- 新增
const userInput = play();:在循环内只触发一次prompt,将输入值保存到变量中,所有判断都基于这个变量 - 修正while循环条件为
playerScore < 3 && compScore < 3:只要有一方达到3分就终止循环,符合“先到3分获胜”的规则 - 新增else分支处理无效输入:避免用户输入其他内容时,循环空转无反馈
内容的提问来源于stack exchange,提问作者SolomonM
相关产品推荐
相关产品推荐

