詳解怎么檢測和防止JavaScript死循環(huán)
前言
Js死循環(huán)是怎么造成的呢!其實在我們寫代碼時一些不注意或漏寫,就寫出死循環(huán),就如下面代碼:

如果i++沒有寫上,這個就是死循環(huán)了,死循環(huán)的后果想知道的自己不防去試試。
死循環(huán)就是一段錯誤的阻止終止循環(huán)條件JavaScript代碼。
無限循環(huán)是危險的,因為它會導致您運行代碼的環(huán)境(瀏覽器或 NodeJS 服務(wù)器)崩潰或凍結(jié)您的計算機,導致它停止響應(yīng)。
for和while語句是一個無限循環(huán)的常見原因,所以本教程將幫助您了解如何檢測和修復所造成的語句無限循環(huán)。
讓我們從修復for語句中的無限循環(huán)開始。
在 for 語句中修復無限循環(huán)
一個for語句可能會導致一個無限循環(huán),當你錯誤的第二表達式把賦值運算符,而不是一個比較運營商(在條件表達式)
下面是一個for會導致無限循環(huán)的語句示例。注意第二個表達式是如何i = 10:
for (let i = 0; i = 10; i++) {
console.log("Infinite loop");
}
該for語句要求第二個表達式的計算結(jié)果false為終止循環(huán)。在上面的示例中,賦值運算符i = 10被放置為條件表達式,而不是像i < 10or之類的比較運算符i > 10。
由于賦值運算符的計算結(jié)果始終為true,因此該for語句不會停止打印"Infinite loop"到控制臺,這可能會導致您的計算機死機。
要修復for上面的語句,您需要將第二個表達式替換為該for語句可以達到的內(nèi)容。一個例子是使用比較運算符 ( =<, <, >, >=)
// the second expression is replaced with <
for (let i = 0; i < 10; i++) {
console.log("Infinite loop");
}
同樣的錯誤還有另一個版本。這一次,第一個表達式和第二個表達式導致無限循環(huán):
for (let i = 5; i > 0; i++) {
console.log("Infinite loop");
}
從上面的代碼可以看出,只要變量i大于,循環(huán)就會繼續(xù)0。
由于 的值i已經(jīng)大于0初始化時的值,因此第二個表達式將始終計算為true,從而導致無限循環(huán)。
為了修復上面的代碼,第三個表達式必須減少i而不是增加它的值:
for (let i = 5; i > 0; i--) {
console.log("Infinite loop");
}
另一個for可能導致無限循環(huán)的語句示例是省略括號內(nèi)的所有三個表達式,如下所示:
for (;;) {
console.log("Infinite loop");
}
但是上面的代碼只能是故意寫的,所以除非你想讓你的電腦崩潰,否則你不應(yīng)該在你的項目中使用它。
盡管for您編寫的語句肯定會比上面的示例更復雜,但您仍然可以使用相同的原則來查找和修復語句中的錯誤。
首先,您需要確保放在for語句中的第二個表達式實際上可以計算為false.
如果第二個表達式已經(jīng)正確,則開始檢查第一個和第三個表達式。第一個表達式是否初始化了一個true在執(zhí)行第二個表達式時始終計算為的值?
最后,第三個表達式是否正確遞增或遞減第一個表達式中初始化的變量的值?
總結(jié)一下:首先檢查你的第二個表達式,然后按順序檢查第一個和第三個表達式。
接下來,讓我們學習如何修復由while語句引起的無限循環(huán)。
在 while 語句中修復無限循環(huán)
一個while語句可以導致無限循環(huán),當條件表達式括號始終計算里面放true:
while (true) {
console.log("Infinite loop");
}
為了防止無限循環(huán),while 語句的條件表達式必須能夠計算為false。
編寫while語句時最常見的錯誤之一是忘記修改用于條件表達式的變量的值。
請注意i以下示例中 never的值如何更改:
let i = 0;
while (i < 6) {
console.log("Infinite loop");
}
您需要增加語句體i內(nèi)部的值,while以便在false執(zhí)行循環(huán)時條件表達式的計算結(jié)果為:
let i = 0;
while (i < 6) {
console.log("Infinite loop");
i++;
}
無論您的while語句多么復雜,您都需要確保括號內(nèi)的條件表達式while()可以計算為false.
如果仍然找不到導致無限循環(huán)的原因,則可以使用該console.log()語句打印條件表達式使用的變量的值:
let i = 0;
while (i < 6) {
console.log("Infinite loop");
i++;
console.log(i);
}
控制臺日志可以幫助您查明錯誤的代碼行并修復它。
總結(jié)
到此這篇關(guān)于怎么檢測和防止JavaScript死循環(huán)的文章就介紹到這了,更多相關(guān)檢測和防止js死循環(huán)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
javascript權(quán)威指南 學習筆記之javascript數(shù)據(jù)類型
JavaScript中允許使用三種基本數(shù)據(jù)類型 數(shù)字,文本字符和布爾值。其中數(shù)字包括符點數(shù).此外,它還支持兩種小數(shù)據(jù)類型 -null(空)和undefined(未定義),該兩種小數(shù)據(jù)類型,它們各自只定義了一個值 。2011-09-09
js實現(xiàn)input密碼框提示信息的方法(附html5實現(xiàn)方法)
這篇文章主要介紹了js實現(xiàn)input密碼框提示信息的方法,涉及JavaScript頁面元素的獲取,屬性判斷及樣式設(shè)置等技巧,并附帶html5的相關(guān)實現(xiàn)方法,需要的朋友可以參考下2016-01-01
JavaScript實現(xiàn)簡單精致的圖片左右無縫滾動效果
這篇文章主要介紹了JavaScript實現(xiàn)簡單精致的圖片左右無縫滾動效果,涉及javascript結(jié)合時間函數(shù)動態(tài)操作頁面元素屬性的相關(guān)技巧,需要的朋友可以參考下2017-03-03

