Javascript 嵌套在 If 语句中的 switch 语句无法访问其他变量并且 returns 未识别

Javascript switch statement nested inside If statement cannot access other variables and returns Unidentified

我像往常一样正在开发 Rock/Paper/Scissors 游戏。不知何故,我的 ifswitch 语句无法读取其他两个函数设置的值,当我 console.log result 它 returns undefined

然而,当我手动设置 usercomputer 变量时,decideWinner 功能按预期工作。

我已经修改它几个小时了,如果能提供一些帮助,我们将不胜感激。谢谢。

let user
let computer
let result
//1
function userChoice() {
  let user = prompt(`rock, paper, scissors`)
}

//2
function computersTurn() {
  let randomNumber = Math.floor((Math.random() * 3) + 1);
  switch (randomNumber) {
    case 1:
      computer = `rock`;
      break;
    case 2:
      computer = `scissors`;
      break;
    case 3:
      computer = `paper`;
      break;
  }
}

//3
function decideWinner() {
  if (user == `rock`) {
    switch (computer) {
      case `rock`:
        result = `tie`
        break;
      case 'scissors':
        result = `player`
        break;
      case `paper`:
        result = `computer`
        break;
    }
  } else if (user == `paper`) {
    switch (computer) {
      case `rock`:
        result = `player`
        break;
      case 'scissors':
        result = `computer`
        break;
      case `paper`:
        result = `tie`
        break;
    }
  } else if (user == `scissors`) {
    switch (computer) {
      case `rock`:
        result = `computer`
        break;
      case 'scissors':
        result = `tie`
        break;
      case `paper`:
        result = `player`
        break;
    }
  }
}

userChoice();
computersTurn();
decideWinner();
console.log(result);

您不应重新创建 user 变量。执行此操作时,会在 本地 创建另一个 user 变量,并将提示结果分配给该变量,从而使全局 user 变量保持未定义状态。使用 user = ... 而不是 let user = ...:

let user
let computer
let result
//1
function userChoice() {
  user = prompt(`rock, paper, scissors`)
}

//2
function computersTurn() {
  let randomNumber = Math.floor((Math.random() * 3) + 1);
  switch (randomNumber) {
    case 1:
      computer = `rock`;
      break;
    case 2:
      computer = `scissors`;
      break;
    case 3:
      computer = `paper`;
      break;
  }
}

//3
function decideWinner() {
  if (user == `rock`) {
    switch (computer) {
      case `rock`:
        result = `tie`
        break;
      case 'scissors':
        result = `player`
        break;
      case `paper`:
        result = `computer`
        break;
    }
  } else if (user == `paper`) {
    switch (computer) {
      case `rock`:
        result = `player`
        break;
      case 'scissors':
        result = `computer`
        break;
      case `paper`:
        result = `tie`
        break;
    }
  } else if (user == `scissors`) {
    switch (computer) {
      case `rock`:
        result = `computer`
        break;
      case 'scissors':
        result = `tie`
        break;
      case `paper`:
        result = `player`
        break;
    }
  }
}

userChoice();
computersTurn();
decideWinner();
console.log(result);

注意:您可以用更简单的方式重写 computersTurn 函数:

function computersTurn() {
  let choices = ["rock", "scissors", "paper"];
  let randomNumber = Math.floor((Math.random() * 3));
  computer = choices[randomNumber];
}