Rock-Paper-Scissor游戏报错:playerSelection未定义问题求助
问题:调用playRound时出现
Uncaught ReferenceError: playerSelection is not defined错误 我正在尝试创建一个名为game()的函数,通过prompt提示用户输入'rock'、'paper'或'scissor'并赋值给const playerSelection;调用getComputerChoice()生成随机的computerSelection后,调用playRound()并试图传入这两个参数,但控制台在playRound()第一行抛出Uncaught ReferenceError: playerSelection is not defined错误。以下是我的代码:
function getComputerChoice() { let computerChoice = Math.floor(Math.random() * 3); if (computerChoice === 0) { return 'rock'; } else if (computerChoice === 1) { return 'paper'; } else if (computerChoice === 2) { return 'scissor'; } } function playRound() { if (playerSelection === computerSelection) { return 'Draw!'; } else if (playerSelection === 'rock' && computerSelection === 'scissor') { return 'You Win! Rock beats Scissor'; } else if (playerSelection === 'rock' && computerSelection === 'paper') { return 'You Lose! Paper beats Rock'; } else if (playerSelection === 'paper' && computerSelection === 'rock') { return 'You Win! Paper beats Rock'; } else if (playerSelection === 'paper' && computerSelection === 'scissor') { return 'You Lose! Scissor beats Paper'; } else if (playerSelection === 'scissor' && computerSelection === 'paper') { return 'You Win! Scissor beats Paper'; } else if (playerSelection === 'scissor' && computerSelection === 'rock') { return 'You Lose! Rock beats Scissor'; } return 'Invalid input'; } function game() { const playerSelection = prompt("Choose hand signal", ""); const computerSelection = getComputerChoice(); console.log(computerSelection); playRound() } game();
错误原因
playerSelection和computerSelection是game()函数内部的局部变量,playRound()函数无法直接访问这些变量。同时你定义的playRound()没有设置参数,即使调用时想传参也接收不到,导致函数内部找不到这两个变量。
修改步骤
- 给playRound添加参数:让函数接收
playerSelection和computerSelection作为输入参数 - 调用playRound时传入参数:在
game()里调用playRound(playerSelection, computerSelection) - 可选优化:输入验证:将用户输入转为小写,避免大小写不匹配导致的无效判断
修改后的完整代码
function getComputerChoice() { let computerChoice = Math.floor(Math.random() * 3); if (computerChoice === 0) { return 'rock'; } else if (computerChoice === 1) { return 'paper'; } else if (computerChoice === 2) { return 'scissor'; } } // 新增参数接收外部传入的选择 function playRound(playerSelection, computerSelection) { // 验证用户输入合法性 const validChoices = ['rock', 'paper', 'scissor']; const playerChoice = playerSelection.toLowerCase(); if (!validChoices.includes(playerChoice)) { return 'Invalid input! Please enter rock, paper or scissor.'; } if (playerChoice === computerSelection) { return 'Draw!'; } else if (playerChoice === 'rock' && computerSelection === 'scissor') { return 'You Win! Rock beats Scissor'; } else if (playerChoice === 'rock' && computerSelection === 'paper') { return 'You Lose! Paper beats Rock'; } else if (playerChoice === 'paper' && computerSelection === 'rock') { return 'You Win! Paper beats Rock'; } else if (playerChoice === 'paper' && computerSelection === 'scissor') { return 'You Lose! Scissor beats Paper'; } else if (playerChoice === 'scissor' && computerSelection === 'paper') { return 'You Win! Scissor beats Paper'; } else if (playerChoice === 'scissor' && computerSelection === 'rock') { return 'You Lose! Rock beats Scissor'; } } function game() { const playerSelection = prompt("Choose hand signal (rock, paper, scissor)", ""); const computerSelection = getComputerChoice(); console.log(`Computer chose: ${computerSelection}`); // 调用时传入两个参数 const result = playRound(playerSelection, computerSelection); console.log(result); } game();
关键改动说明
playRound()新增参数,实现外部变量的传递- 调用
playRound()时明确传入玩家和电脑的选择值 - 添加输入小写转换和合法性验证,提升程序健壮性,避免用户输入大小写错误或无效内容导致的判断异常
内容的提问来源于stack exchange,提问作者M Codet
相关产品推荐
相关产品推荐

