免責聲明:我對JavaScript很新,所以我猜測我要麼做錯了什麼,要麼誤會這是如何工作的。Javascript函數只能看到作爲參數傳入的全局變量的默認值
我有兩個變量,其默認值爲0,稍後通過幾個函數進行更改。
var userAnswerContainer = 0;
var computerAnswerContainer = 0;
function userInput() {
userAnswerContainer = prompt("Please choose either Rock, Paper, or Scissors:").toLowerCase();
switch (userAnswerContainer) {
case "rock":
break;
case "paper":
break;
case "scissors":
break;
default:
alert(userAnswerContainer + " is not a valid answer.");
userInput();
}
}
function computerInput() {
computerAnswerContainer = Math.floor(Math.random() * 9);
if (computerAnswerContainer <= 3) {
computerAnswerContainer = "rock";
} else if (computerAnswerContainer >= 4 && computerAnswerContainer <= 6) {
computerAnswerContainer = "paper";
} else {
computerAnswerContainer = "scissors";
}
}
這些變量發生變化後,我在將它們作爲單獨的函數的參數(在岩石上,剪子,布的遊戲),但功能似乎只看到被變量的原始值。
function gameStartV2(y, c) {
userInput();
computerInput();
alert(computerAnswerContainer + "/" + userAnswerContainer);
/*Testing: Displays values of AnswerContainers applied by respective functions*/
if (c === y) {
alert("You chose " + y + ". Computer chose " + c + ". It's a tie!");
} else if (c === "rock") {
if (y === "paper") {
alert("Paper covers rock, you win!");
userScore++;
} else {
alert("Rock smashes scissors, you lose!");
computerScore++;
}
compareScore();
} else if (c === "scissors") {
if (y === "rock") {
alert("Rock smashes scissors, you win!");
userScore++;
} else {
alert("Scissors cuts paper, you lose!");
computerScore++;
}
} else if (c === "paper") {
if (y === "rock") {
alert("Paper covers rock, you lose!");
computerScore++;
} else {
alert("Scissors cuts paper, you win!");
userScore++;
}
} else {
\t alert("Error, please try again.");
}
compareScore();
}
gameStartV2(userAnswerContainer,computerAnswerContainer);
如果我運行參數函數內部的變量進行檢查,我可以看到,他們確實從轉變職能持有價值,然而if/else語句仍然是隻看到0.這裏發生了什麼?
Jfiddle:https://jsfiddle.net/Spiderpiggie/ucuzry8p/9/
,你並不需要的Y和C PARAMS – Cruiser
啊,看起來像這樣做的。 我是否認爲y和c充當傳遞參數的佔位符,並且他們會自動採用這些參數的最新設置值? –
幾乎,y和c是傳遞給函數的參數,它們是副本,而不是在執行時傳遞的變量的引用。這意味着他們不會更新,除非你這樣做。 – Mouser