這是來自 The Odin Project 的 Rock, Paper, Scissors 任務。當我運行代碼時, playerSelection 和 computerSelection 變數是未定義的。即使我定義了這些變數,為什么它顯示未定義?
let playerScore = 0;
let computerScore = 0;
let playerSelection = 'scissors';
const choices = ['rock', 'paper', 'scissors'];
function computerPlay() {
let computerResult = [Math.floor(Math.random() * choices.length)];
return computerSelection = choices[computerResult];
}
console.log(`Player Score: ${playerScore}`);
console.log(`Computer Score: ${computerScore}`);
console.log(`Computer picked ${computerPlay()}`);
function playRound(playerSelection, computerSelection) {
if (computerSelection === playerSelection) {
console.log(`${playerSelection} vs. ${computerSelection}. It's a tie!`);
}
else if (computerSelection === 'rock' && playerSelection === 'scissors'){
console.log(`${playerSelection} vs. ${computerSelection}. You lose! Try again next time.`);
computerScore ;
}
else if (computerSelection === 'paper' && playerSelection === 'rock'){
console.log(`${playerSelection} vs. ${computerSelection}. You lose! Try again next time.`);
computerScore ;
}
else if (computerSelection === 'scissors' && playerSelection === 'paper'){
console.log(`${playerSelection} vs. ${computerSelection}. You lose! Try again next time.`);
computerScore ;
}
else if (playerScore === 'rock' && computerSelection === 'scissors'){
console.log(`${playerSelection} vs. ${computerSelection}. You win!`);
playerScore ;
}
else if (playerScore === 'paper' && computerSelection === 'rock'){
console.log(`${playerSelection} vs. ${computerSelection}. You win!`);
playerScore ;
}
else (playerScore === 'scissors' && computerSelection === 'paper')
console.log(`${playerSelection} vs. ${computerSelection}. You win!`);
playerScore ;
}
playRound();
uj5u.com熱心網友回復:
您依賴此呼叫computerPlayer
console.log(`Computer picked ${computerPlay()}`);
computerSelection
在此處創建全域變數
return computerSelection = choices[computerResult];
然后,通過將引數定義為具有相同識別符號,您可以在 范圍內隱藏這些全域變數。playRound
function playRound(playerSelection, computerSelection) {
快速而混亂的解決方法是呼叫playRound
,從外部范圍傳入變數
playRound(playerSelection, computerSelection)
playRound
有不平衡的花括號,以及像playerScore === 'rock'
andelse
而不是else if
.
這些行正在創建一個陣列,其中包含[0, 2]范圍內的單個數字。
let computerResult = [Math.floor(Math.random() * choices.length)];
return computerSelection = choices[computerResult];
并將此陣列用作另一個陣列的索引。由于型別強制,這幾乎不起作用。
考慮進行一些重構,以重構此代碼以減少對生成和在陌生地方使用全域變數的依賴。
您也不需要詳盡地檢查每種可能性組合。如果您檢查了玩家未獲勝的所有結果,那么剩下的就是玩家確實獲勝的結果。
一個例子:
const rps = [ 'rock', 'paper', 'scissors' ];
let playerScore = 0;
let computerScore = 0;
const pickRandom = arr => arr[Math.floor(Math.random() * arr.length)];
const playRound = (playerSelection, computerSelection) => {
if (computerSelection === playerSelection) {
console.log(`${playerSelection} vs. ${computerSelection}. It's a tie!`);
} else if (
(computerSelection === 'rock' && playerSelection === 'scissors') ||
(computerSelection === 'paper' && playerSelection === 'rock') ||
(computerSelection === 'scissors' && playerSelection === 'paper')
) {
console.log(`${playerSelection} vs. ${computerSelection}. You lose! Try again next time.`);
computerScore ;
} else {
console.log(`${playerSelection} vs. ${computerSelection}. You win!`);
playerScore ;
}
};
let rounds = 3;
while (rounds--) {
let playerChoice = 'scissors'; // make this interactive!
let computerChoice = pickRandom(rps);
console.log(`Player picked: ${playerChoice}`);
console.log(`Computer picked ${computerChoice}`);
playRound(playerChoice, computerChoice);
console.log(`Player Score: ${playerScore}`);
console.log(`Computer Score: ${computerScore}`);
}
不過,可能希望快速轉向面向物件的方法,以解開更多全域變數,并將游戲狀態包含在單個物件中。
uj5u.com熱心網友回復:
您忘記將引數傳遞給您的函式。
playRound(compuplayerSelection, computerSelection);
此外,您在獲勝宣告中寫了 playerScore 而不是 playerSelection,并且您忘記將“if”放在最后一個。
let playerScore = 0;
let computerScore = 0;
let playerSelection = 'scissors';
const choices = ['rock', 'paper', 'scissors'];
function computerPlay() {
let computerResult = [Math.floor(Math.random() * choices.length)];
return computerSelection = choices[computerResult];
}
console.log(`Player Score: ${playerScore}`);
console.log(`Computer Score: ${computerScore}`);
console.log(`Computer picked ${computerPlay()}`);
function playRound(playerSelection, computerSelection) {
if (computerSelection === playerSelection) {
console.log(`${playerSelection} vs. ${computerSelection}. It's a tie!`);
}
else if (computerSelection === 'rock' && playerSelection === 'scissors'){
console.log(`${playerSelection} vs. ${computerSelection}. You lose! Try again next time.`);
computerScore ;
}
else if (computerSelection === 'paper' && playerSelection === 'rock'){
console.log(`${playerSelection} vs. ${computerSelection}. You lose! Try again next time.`);
computerScore ;
}
else if (computerSelection === 'scissors' && playerSelection === 'paper'){
console.log(`${playerSelection} vs. ${computerSelection}. You lose! Try again next time.`);
computerScore ;
}
else if (playerSelection === 'rock' && computerSelection === 'scissors'){
console.log(`${playerSelection} vs. ${computerSelection}. You win!`);
playerScore ;
}
else if (playerSelection === 'paper' && computerSelection === 'rock'){
console.log(`${playerSelection} vs. ${computerSelection}. You win!`);
playerScore ;
}
else if (playerSelection === 'scissors' && computerSelection === 'paper')
console.log(`${playerSelection} vs. ${computerSelection}. You win!`);
playerScore ;
}
playRound(playerSelection, computerSelection);
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/470897.html
標籤:javascript 功能
上一篇:排序串列時忽略字符
下一篇:在另一個方法中使用一個方法