如何修复JavaScript中的未定义变量

时间:2019-07-12 18:07:37

标签: javascript

由于某种原因,我的函数没有返回1或2,即使它是专门为此设置的。我究竟做错了什么?我正在查看chrome开发工具,它告诉我var processedundefined

我对此很困惑。我一直在阅读是否是因为可以将变量用作参数,但是我不确定是否是这种情况

var processChoices = function (player, computer){
    switch (player) {
        case player == 'rock':
            if (computer == 'paper'){
                var winner = 2; 
            } else if (computer == 'scissors'){
                var winner = 1; 
            }
            break;
        case player == 'paper':
            if (computer == 'scissors'){
                var winner = 2;
            } else if (computer == 'rock'){
                var winner = 1;
            }
            break;
        case player == 'scissors':
            if (computer == 'rock'){
                var winner = 2;
            } else if (computer == 'paper'){
                var winner = 1;
            }
            break;
        default:
            if (computer == player){
        var winner = console.log('We have a tie, go again!');
            } 
            break;
    }
    return winner
}

var determineWinner = function (){
    var computer = computerPlay();
    var player = playerChoice();
    var processed = processChoices(player, computer);

    if (processed == 1){
        playerCount += 1;
    } else {
        computerCount += 1;
    }
    var message = (processed == 2) ? `The computer wins! ${computer} beats ${player}!` : `The player wins! ${player} beats ${computer}!`;
    console.log(message);

}

我期望var processed的输出为1或2。它将返回为undefined

3 个答案:

答案 0 :(得分:1)

您似乎没有正确使用switch语句。您的case语句只需是您要匹配的值。见下文。

最好一次声明变量winner

var processChoices = function(player, computer) {
  var winner = 0;
  switch (player) {
    case 'rock':
      if (computer == 'paper') {
        winner = 2;
      } else if (computer == 'scissors') {
        winner = 1;
      }
      break;
    case 'paper':
      if (computer == 'scissors') {
        winner = 2;
      } else if (computer == 'rock') {
        winner = 1;
      }
      break;
    case 'scissors':
      if (computer == 'rock') {
        winner = 2;
      } else if (computer == 'paper') {
        winner = 1;
      }
      break;
    default:
      if (computer == player) {
        console.log('We have a tie, go again!');
      }
      break;
  }
  return winner
}

var computer = "rock";
var player = "paper";
console.log("Player chose:", player, "Computer chose:", computer);
console.log("The winner is...", processChoices(player, computer));

答案 1 :(得分:-1)

首先关闭开关格式是错误的。

switch (player) {
  case player == 'rock':  // wrong
  case 'rock':            // correct

第二步,您需要检查计算机的所有状态,否则请在末尾检查

var processChoices = function (player, computer){
    let winner = 0;
    switch (player) {
        case 'rock':
            if (computer === 'paper'){
                winner = 2; 
            } else if (computer === 'scissors'){
                winner = 1; 
            }
            break;
        case 'paper':
            if (computer === 'scissors'){
                winner = 2;
            } else if (computer === 'rock'){
                winner = 1;
            }
            break;
        case 'scissors':
            if (computer === 'rock'){
                winner = 2;
            } else if (computer === 'paper'){
                winner = 1;
            }
            break;
    }

    if (winner === 0) {
      console.log('We have a tie, go again!');
    }

    return winner
}

ps:

  • 使用constlet。不要使用`var'
  • 使用===而不是==

整个东西还可以小很多

const winnerTable = {
  rock: {
    rock: 0,
    paper: 2,
    scissors: 1,
  },
  paper: {
    rock: 1,
    paper: 0,
    scissors: 2,
  },
  scissors: {
    rock: 2,
    paper: 1,
    scissors: 0,
  },
};

var processChoices = function (player, computer){
  return winnerTable[player][computer];
};

答案 2 :(得分:-2)

好吧,我猜它在var defineWinner中, 已处理的var = processChoices(玩家,计算机); 并且processChoices是一个var而不是带有参数的函数 =>删除(玩家,计算机);