You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 04:01:24