前言
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死循环内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!