我知道此代码无法正常工作,为什么我找到的代码可以工作?是什么使错误的代码错了?

时间:2019-05-05 02:50:20

标签: javascript jquery html

这是来自一些编码书中的一些练习。目标是使用for循环和jQuery在不同的行上打印您的朋友姓名;但是每次我打开它时,页面都会变得无响应。我想确切知道为什么。

这是无效的代码:

var friendsName = prompt("enter a friends name");

for(friendsName; friendsName !== null;){
    $("body").append("<p>" + friendsName + "<p>");
} 

这是执行以下操作的代码:

for(var listYourFriends;listYourFriends !== null;listYourFriends = prompt("enter a friends name"))
{

   if(listYourFriends !== undefined){$("body").append("<p>" + listYourFriends + " smells" + "</p>");
    }


    else if( listYourFriends === null){
        break;
    }
}

但是现在我得到了答案,我不知道为什么这段代码行得通,而其他代码行不通。另一个虽然确实给我带来了一些警报,但在我看来,它似乎是有道理的。有人可以解释两者之间的区别吗?

1 个答案:

答案 0 :(得分:0)

您的代码将进入无限循环,因为friendsName !== null循环的条件 for永远不会得到false 。例如,当您在提示符下输入一些名称时,它将不会再次更改,并且在整个代码中将保持不变。

您需要在每个循环中用新值更新friendsName

var friendsName = prompt("enter a friends name");

for(friendsName; friendsName !== null;){  
  $("body").append("<p>" + friendsName + "<p>");
  friendsName = prompt("enter a friends name");
} 
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

代码为什么起作用?

根据MDN,for语句的语法为

for ([initialization]; [condition]; [final-expression]) 

这里final-expression是将在每次迭代期间评估的部分。在上面的代码中,我们在每次迭代期间执行以下行。

friendsName = prompt("enter a friends name");

因此我们可以将其放在[final-expression]的位置,并且其行为将相同。这就是有问题的代码起作用的原因。