文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

详解怎么检测和防止JavaScript死循环

2024-04-02 19:55

关注

前言

Js死循环是怎么造成的呢!其实在我们写代码时一些不注意或漏写,就写出死循环,就如下面代码:

如果i++没有写上,这个就是死循环了,死循环的后果想知道的自己不防去试试。

死循环就是一段错误的阻止终止循环条件JavaScript代码。

无限循环是危险的,因为它会导致您运行代码的环境(浏览器或 NodeJS 服务器)崩溃或冻结您的计算机,导致它停止响应。

for和while语句是一个无限循环的常见原因,所以本教程将帮助您了解如何检测和修复所造成的语句无限循环。

让我们从修复for语句中的无限循环开始。

在 for 语句中修复无限循环

一个for语句可能会导致一个无限循环,当你错误的第二表达式把赋值运算符,而不是一个比较运营商(在条件表达式)

下面是一个for会导致无限循环的语句示例。注意第二个表达式是如何i = 10:


for (let i = 0; i = 10; i++) {
  console.log("Infinite loop");
}

该for语句要求第二个表达式的计算结果false为终止循环。在上面的示例中,赋值运算符i = 10被放置为条件表达式,而不是像i < 10or之类的比较运算符i > 10。

由于赋值运算符的计算结果始终为true,因此该for语句不会停止打印"Infinite loop"到控制台,这可能会导致您的计算机死机。

要修复for上面的语句,您需要将第二个表达式替换为该for语句可以达到的内容。一个例子是使用比较运算符 ( =<, <, >, >=)


// the second expression is replaced with <
for (let i = 0; i < 10; i++) {
  console.log("Infinite loop");
}

同样的错误还有另一个版本。这一次,第一个表达式和第二个表达式导致无限循环:


for (let i = 5; i > 0; i++) {
  console.log("Infinite loop");
}

从上面的代码可以看出,只要变量i大于,循环就会继续0。

由于 的值i已经大于0初始化时的值,因此第二个表达式将始终计算为true,从而导致无限循环。

为了修复上面的代码,第三个表达式必须减少i而不是增加它的值:


for (let i = 5; i > 0; i--) {
  console.log("Infinite loop");
}

另一个for可能导致无限循环的语句示例是省略括号内的所有三个表达式,如下所示:


for (;;) {
  console.log("Infinite loop");
}

但是上面的代码只能是故意写的,所以除非你想让你的电脑崩溃,否则你不应该在你的项目中使用它。

尽管for您编写的语句肯定会比上面的示例更复杂,但您仍然可以使用相同的原则来查找和修复语句中的错误。

首先,您需要确保放在for语句中的第二个表达式实际上可以计算为false.

如果第二个表达式已经正确,则开始检查第一个和第三个表达式。第一个表达式是否初始化了一个true在执行第二个表达式时始终计算为的值?

最后,第三个表达式是否正确递增或递减第一个表达式中初始化的变量的值?

总结一下:首先检查你的第二个表达式,然后按顺序检查第一个和第三个表达式。

接下来,让我们学习如何修复由while语句引起的无限循环。

在 while 语句中修复无限循环

一个while语句可以导致无限循环,当条件表达式括号始终计算里面放true:


while (true) {
  console.log("Infinite loop");
}

为了防止无限循环,while 语句的条件表达式必须能够计算为false。

编写while语句时最常见的错误之一是忘记修改用于条件表达式的变量的值。

请注意i以下示例中 never的值如何更改:


let i = 0;
 
while (i < 6) {
  console.log("Infinite loop");
}

您需要增加语句体i内部的值,while以便在false执行循环时条件表达式的计算结果为:


let i = 0;
 
while (i < 6) {
  console.log("Infinite loop");
  i++;
}

无论您的while语句多么复杂,您都需要确保括号内的条件表达式while()可以计算为false.

如果仍然找不到导致无限循环的原因,则可以使用该console.log()语句打印条件表达式使用的变量的值:


let i = 0;
 
while (i < 6) {
  console.log("Infinite loop");
  i++;
  console.log(i);
}

控制台日志可以帮助您查明错误的代码行并修复它。

总结

到此这篇关于怎么检测和防止JavaScript死循环的文章就介绍到这了,更多相关检测和防止js死循环内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-前端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯