1. 程式人生 > 程式設計 >詳解怎麼檢測和防止JavaScript死迴圈

詳解怎麼檢測和防止JavaScript死迴圈

目錄
  • 前言
  • 在 for 語句中修復無限迴圈
  • 在 while 語句中修復無限迴圈
  • 總結

前言

死迴圈是怎麼造成的呢!其實在我們寫程式碼時一些不注意或漏寫,就寫出死迴圈,就如下面程式碼:

詳解怎麼檢測和防止JavaScript死迴圈

如果i++沒有寫上,這個就是死迴圈了,死迴圈的後果想知道的自己不防去試試。

死迴圈就是一段錯誤的阻止終止迴圈條件程式碼。

無限迴圈是危險的,因為它會導致您執行程式碼的環境(瀏覽器或 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 <
fo客棧r (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初始化時的值,因此第二個表示式將始終計算為tEIwyhWZyrue,從而導致無限迴圈。

為了修復上面的程式碼,第三個表示式必須減少i而不是增加它的值:

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

另一個for可能導致無限迴圈的語句示例是省略括號內的所有三個表示式,如下所示:

for (;;) {
  console.lhttp://www.cppcns.comog("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);
}

控制檯日誌可以幫助您查明錯誤的程式碼行並修復它。

總結

到此這篇關於怎麼檢測和防止Script死迴圈的文章就介紹到這了,更多相關檢測和防止js死迴圈內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!