如何检测和防止 JavaScript 死循环

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

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

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

让我们从修复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);
}

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值