简体   繁体   中英

How to fix undefined variable in javascript

For some reason my function is not returning a 1 or 2 even though it's specifically setup to do so. What am I doing wrong? I'm looking at the chrome dev tools and it's telling me that var processed is undefined .

I'm quite stumped on this. I've been reading if it's because a variable could be used as a parameter but I'm not sure if this is the case

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);

}

I'm expecting the output of var processed to be 1 or 2. It's coming back as undefined .

It looks like you're not using the switch statement correctly. Your case statements need to just be the value that you want to match. See below.

It's would also be good to declare the variable winner once.

 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)); 

First off the switch format is wrong.

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

Second you need to check all states of computer or else check at the end

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:

  • use const and let . Don't use `var'
  • use === not ==

Also the entire thing can be a lot smaller

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];
};

well I guess it's in var determineWinner u called var processed = processChoices(player, computer); and processChoices is a var not a function with parameters =>delete (player, computer);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM