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
相关产品推荐
相关产品推荐

