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

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()没有设置参数,即使调用时想传参也接收不到,导致函数内部找不到这两个变量。

修改步骤

  1. 给playRound添加参数:让函数接收playerSelection和computerSelection作为输入参数
  2. 调用playRound时传入参数:在game()里调用playRound(playerSelection, computerSelection)
  3. 可选优化:输入验证:将用户输入转为小写,避免大小写不匹配导致的无效判断

修改后的完整代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 13:03:31