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

JavaScript石头剪刀布游戏分数显示undefined的问题求助

问题原因与解决建议

核心问题1:函数参数覆盖全局变量

你的playGame函数定义了playerScore和computerScore作为参数,这会创建局部变量,直接覆盖全局作用域中声明的同名变量。而你调用playGame()时没传任何参数,这两个局部变量默认值是undefined,所以循环内打印的分数全是undefined。

核心问题2:playGame无返回值导致最终输出undefined

最后一行console.log(playGame())会打印函数的返回值,但你的playGame函数没有写return语句,JS函数默认返回undefined,所以会输出这个结果。


修复步骤

步骤1:移除playGame的参数

删掉函数定义里的参数,让函数直接使用全局的分数变量:

function playGame() { // 移除括号里的playerScore和computerScore参数
    for (let i = 0; i < 5; i++){
        let computerSelection = getComputerChoice();
        let playerSelection = "Rock";
        console.log(playRound(playerSelection, computerSelection));
        console.log(`Player: ${playerScore}\nComputer: ${computerScore}`);
    }
}

步骤2:调整最终调用方式

直接调用playGame()就行,不用用console.log包裹,函数内部已经有打印逻辑:

playGame(); // 替换原来的console.log(playGame())

可选优化:避免全局变量(进阶)

如果不想用全局变量,可以把分数作为函数内部状态,通过闭包管理,封装性更好:

function playGame() {
    let playerScore = 0;
    let computerScore = 0;

    function playRound(playerSelection, computerSelection) {
        if (playerSelection === computerSelection) {
            return "Draw!";
        }
        else if (playerSelection.toLowerCase() === "rock" && computerSelection === "Paper") {
            computerScore++;
            return ("Computer Wins!");
        }
        else if (playerSelection.toLowerCase() === "rock" && computerSelection === "Scissors") {
            playerScore++;
            return ("You Win!");
        }
        else if (playerSelection.toLowerCase() === "paper" && computerSelection === "Rock") {
            playerScore++;
            return ("You Win!");
        }
        else if (playerSelection.toLowerCase() === "paper" && computerSelection === "Scissors") {
            computerScore++;
            return ("Computer Wins!");
        }
        else if (playerSelection.toLowerCase() === "scissors" && computerSelection === "Rock") {
            computerScore++;
            return ("Computer Wins!");
        }
        else {
            return ("You Win!");
        }
    }

    for (let i = 0; i < 5; i++){
        let computerSelection = getComputerChoice();
        let playerSelection = "Rock";
        console.log(playRound(playerSelection, computerSelection));
        console.log(`Player: ${playerScore}\nComputer: ${computerScore}`);
    }
}

playGame();

内容的提问来源于stack exchange,提问作者NyPa-32

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 02:07:20