首页 > 解决方案 > 我知道这段代码不起作用,为什么我找到的代码起作用?是什么导致错误的代码,错误的?

问题描述

这是来自一些编码书中的一些练习。目标是使用 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;
    }
}

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

标签: javascriptjqueryhtml

解决方案


您的代码将进入无限循环,因为循环条件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");

所以我们可以把它放在 and 的地方,[final-expression]它的行为是一样的。这就是问题中给出的代码有效的原因。


推荐阅读