javascript - 我知道这段代码不起作用,为什么我找到的代码起作用?是什么导致错误的代码,错误的?
问题描述
这是来自一些编码书中的一些练习。目标是使用 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;
}
}
但现在我得到了答案,我不知道为什么这段代码有效,而另一个却没有。另一个,虽然它确实给我带来了一些警报,但在我看来它应该是有道理的。有人可以解释两者之间的区别吗?
解决方案
您的代码将进入无限循环,因为循环条件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]
它的行为是一样的。这就是问题中给出的代码有效的原因。
推荐阅读
- sql - 按类别、存储和属性分组,并根据属性名称的字母顺序分配顺序
- azure-application-insights - 为 WinForms 应用程序选择 App Center 或 Application Insights
- firebase - 按文档id查询集合
- iolanguage - REPL 与脚本中的克隆行为不同
- python - 使用 python 2.7.12 在 Ubuntu 16.04 服务器上进行视频流式传输期间发生错误
- javascript - 显示来自本地 JSON 文件的数据
- php - 二维数组的 AWS API 网关映射模型
- angular - Html2Canvas 只呈现我屏幕的一半
- delphi - 如何设置 Windows Media Player 在特定位置显示帧
- android - 当我在带有数据绑定的 xml 中按“重新格式化代码”时,Android Studio 3.5 更改视图顺序