function playerSelection() {
let choice = prompt("Enter you choice.");
while(choice != "rock" && choice != "paper" && choice != "scissor"){
alert("Wrong entry");
playerSelection();
}
return choice;
}
在输入一个使while循环条件为真的字符串之前,这段代码工作得很好。一旦它在输入错误的字符串后进入while循环,并提示您输入另一个字符串,即使您输入了正确的字符串,它也会继续显示"错误的输入";警报并显示提示,直到重新加载页面。发生了什么事?
我尝试操作逻辑运算符,但似乎没有帮助。我猜它与递归有关,但我不知道它是什么。
您不需要再次调用该函数。提示方法已经完成了您(我猜)想要做的事情。这样做:
function playerSelection(){
let choice;
do{
choice = prompt("Enter your choice: ");
if(choice != "rock" && choice != "paper" && choice != "scissor"){
alert("Wrong entry!");
}
}while(choice != "rock" && choice != "paper" && choice != "scissor");
return choice;
}
应该在函数之前声明变量,如下所示:
let choice;
function playerSelection(){
choice = prompt("Enter your choice.");
while(choice != "rock" && choice != "paper" && choice != "scissor"){
alert("Wrong entry");
playerSelection();
}
return choice;
}
let result = playerSelection();
alert("result = " + result);
这是因为每次对playerSelection()
的新调用都会创建一个新的调用上下文,该上下文存储自己的局部变量和参数。试一下:
playerSelection() {
let choice = prompt('Enter your choice:')
while (choice != 'rock' && choice != 'paper' && choice != 'scissors') {
alert('Wrong entry')
choice = prompt('Enter your choice:')
}
return choice
}
或者如果你想递归的话
playerSelection() {
let choice = prompt('Enter your choice:')
if (choice == 'rock' || choice == 'paper' || choice == 'scissors') {
return choice
} else {
alert('wrong entry')
return playerSelection()
}
}