(JavaScript)有时会返回未定义。为什么?

问题描述 投票:0回答:1

function getComputerChoice(randomLetterGen) {
  function randomLetterGen() {
    function randomNumGen() {
      return Math.floor(Math.random() * 3);
    }
    let word = "rps";
    return word.charAt(randomNumGen());
  }
  let cpuInput;
  if (randomLetterGen() == "r") {
    cpuInput = "rock";
  } else if (randomLetterGen() == "p") {
    cpuInput = "paper";
  } else if (randomLetterGen() == "s") {
    cpuInput = "scissors";
  }
  return cpuInput;
}
console.log(getComputerChoice());

javascript
1个回答
0
投票

每次调用 randomLetterGen() 时,它都会独立生成一个新的随机字母。 因此,当您在 if 语句中多次调用它时,每次可能会得到不同的结果,从而导致在没有条件匹配时出现未定义的可能性。

function getComputerChoice() {
    function randomLetterGen() {
        function randomNumGen() {
            return Math.floor(Math.random() * 3);
        }
        let word = "rps";
        return word.charAt(randomNumGen());
    }

    let cpuInput = randomLetterGen(); // Call randomLetterGen() once and store the result

    if (cpuInput === "r") {
        return "rock";
    } else if (cpuInput === "p") {
        return "paper";
    } else if (cpuInput === "s") {
        return "scissors";
    }
}

console.log(getComputerChoice());

此外,当 Math.random()*3 小于 2 时,您不会看到未定义的选项,这是因为 randomLetterGen() 函数可能返回“r”、“p”或“s”,这意味着if 条件之一匹配,您将得到有效结果。

© www.soinside.com 2019 - 2024. All rights reserved.