Javascript Can';我不能让我的函数多次运行并破坏我的代码

Javascript Can';我不能让我的函数多次运行并破坏我的代码,javascript,while-loop,Javascript,While Loop,我正在尝试运行此功能,直到玩家或计算机赢5次。没有while循环,它只运行一次,一切正常。只要我添加一个while循环,函数仍然只运行一次,并且它给我一个未定义的返回 函数playToFive(){ log(‘让我们玩石头剪刀’); var-playerWins=0; var=0; while(playerWins==5 | | computerWins==5){ 如果(humanVsMachine==='player'){ playerWins+=1; }else if(humanVsMac

我正在尝试运行此功能,直到玩家或计算机赢5次。没有while循环,它只运行一次,一切正常。只要我添加一个while循环,函数仍然只运行一次,并且它给我一个未定义的返回

函数playToFive(){
log(‘让我们玩石头剪刀’);
var-playerWins=0;
var=0;
while(playerWins==5 | | computerWins==5){
如果(humanVsMachine==='player'){
playerWins+=1;
}else if(humanVsMachine==='computer'){
计算机WINS+=1;
}
返回[playerWins,computerWins];
}
}

log(playToFive())返回将终止循环

function returnMe() {
  for (var i=0; i<2; i++) {
    if (i === 1) return i;
  }
}

alert(returnMe()); Try this out 


function playToFive() {
    console.log('Let\'s play Rock Paper Scissors');
    var playerWins = 0;
    var computerWins = 0;
    while (playerWins === 5 || computerWins === 5) {
        if (humanVsMachine === 'player') {
        playerWins += 1;
        } else if (humanVsMachine === 'computer') {
        computerWins += 1;
        }
    // return [playerWins, computerWins]; moving code to below
    }
    return [playerWins, computerWins]; // moved return outside the loop here
}

console.log(playToFive());
函数returnMe(){

对于(var i=0;i您将在while循环内返回,这将结束循环过程。因此,将返回代码移到循环外,如下所示。还要注意,您的逻辑语句不允许循环正常运行

function playToFive() {
    console.log('Let\'s play Rock Paper Scissors');
    var playerWins = 0;
    var computerWins = 0;
    while (playerWins < 5 && computerWins < 5 ) {
        if (humanVsMachine === 'player') {
        playerWins += 1;
        } else if (humanVsMachine === 'computer') {
        computerWins += 1;
        }
    // return [playerWins, computerWins]; moving code to below
    }
    return [playerWins, computerWins]; // moved return outside the loop here
}

console.log(playToFive());
函数playToFive(){
log(‘让我们玩石头剪刀’);
var-playerWins=0;
var=0;
while(playerWins<5&&computerWins<5){
如果(humanVsMachine==='player'){
playerWins+=1;
}else if(humanVsMachine==='computer'){
计算机WINS+=1;
}
//返回[playerWins,computerWins];将代码移到下面
}
return[playerWins,computerWins];//将return移到循环之外
}
log(playToFive());

请允许我补充一点,您的代码的间距非常有用,在右括号中看起来有点“垂直”。请注意,上面的间距如何帮助您直观地识别以下内容:)

您需要将
return
语句移到while循环之外,但您还需要更改
while
循环上的条件-现在它只在
playerWins
computerWins
正好为5时运行,而实际上它需要在该点停止运行(因此
while(playerWins<5和&computerWins<5)

在计算并执行if-else结构后,将无条件调用
return
语句,从而过早终止循环。您应该将
return
放在循环之后。此外,只要两个播放器都没有达到5秒,循环条件就应该保持不变(使用

您的while循环实际上永远不会执行,因为您正在检查是否相等,并且
playerWins
computerWins
最初都是
0

您可能正在寻找一种更像这样的情况:

while(playerWins < 5 && computerWins < 5)
while(playerWins<5&&computerWins<5)
请注意,我们使用的是逻辑AND
&&
而不是逻辑OR
|
。这是因为您不希望在两个都赢之前一直循环。逻辑OR意味着,即使计算机赢了,但玩家没有赢,我们也将继续循环。只有一个条件需要为真,整个语句才能为true

当我们使用逻辑AND时,如果其中一个是假的(也就是说,如果只有一个玩家已经赢了5场),那么我们将按照我们应该的方式打破循环

下一个问题是while循环中有一个return语句,因此在第一次执行之后,即使还没有达到5个wins,它也会返回玩家的wins和计算机的wins数组

您应该将return语句放在循环之后,这样您就可以运行循环5次,然后在有人赢了之后返回


最后,由于您没有提供其余的代码,我不确定是否实际定义了
humanVsMachine
;如果您在函数之外定义了它,那么就可以继续了。

return将终止循环它将永远不会进入循环,因为playerWins和d computerWins都从0开始,而不是从5开始,它永远不会进入循环编辑了这篇文章并编辑了答案:“给一个人时间写:)哈哈。谢谢你的详细回答。我同意,我需要改进我的间距。我很高兴你发现它很有用,花时间让你的代码更可读是个好主意,而不是停留在愚蠢的事情上。哦,伙计,怪不得这东西不起作用。非常感谢你的Purag。这个解释非常好。谢谢Mureinik.P完美的解决方案。
while(playerWins === 5 || computerWins === 5)
while(playerWins < 5 && computerWins < 5)