免责声明:我对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