欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解怎么檢測(cè)和防止JavaScript死循環(huán)

 更新時(shí)間:2021年11月28日 10:45:24   作者:allway2  
最近工作中遇到了一些死循環(huán)導(dǎo)致的頁(yè)面卡死問題,經(jīng)過 trouble shooting 和代碼修復(fù)解決了問題,所以下面這篇文章主要給大家介紹了怎么檢測(cè)和防止JavaScript死循環(huán)的相關(guān)資料,需要的朋友可以參考下

前言

Js死循環(huán)是怎么造成的呢!其實(shí)在我們寫代碼時(shí)一些不注意或漏寫,就寫出死循環(huán),就如下面代碼:

如果i++沒有寫上,這個(gè)就是死循環(huán)了,死循環(huán)的后果想知道的自己不防去試試。

死循環(huán)就是一段錯(cuò)誤的阻止終止循環(huán)條件JavaScript代碼。

無(wú)限循環(huán)是危險(xiǎn)的,因?yàn)樗鼤?huì)導(dǎo)致您運(yùn)行代碼的環(huán)境(瀏覽器或 NodeJS 服務(wù)器)崩潰或凍結(jié)您的計(jì)算機(jī),導(dǎo)致它停止響應(yīng)。

for和while語(yǔ)句是一個(gè)無(wú)限循環(huán)的常見原因,所以本教程將幫助您了解如何檢測(cè)和修復(fù)所造成的語(yǔ)句無(wú)限循環(huán)。

讓我們從修復(fù)for語(yǔ)句中的無(wú)限循環(huán)開始。

在 for 語(yǔ)句中修復(fù)無(wú)限循環(huán)

一個(gè)for語(yǔ)句可能會(huì)導(dǎo)致一個(gè)無(wú)限循環(huán),當(dāng)你錯(cuò)誤的第二表達(dá)式把賦值運(yùn)算符,而不是一個(gè)比較運(yùn)營(yíng)商(在條件表達(dá)式)

下面是一個(gè)for會(huì)導(dǎo)致無(wú)限循環(huán)的語(yǔ)句示例。注意第二個(gè)表達(dá)式是如何i = 10:

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

該for語(yǔ)句要求第二個(gè)表達(dá)式的計(jì)算結(jié)果false為終止循環(huán)。在上面的示例中,賦值運(yùn)算符i = 10被放置為條件表達(dá)式,而不是像i < 10or之類的比較運(yùn)算符i > 10。

由于賦值運(yùn)算符的計(jì)算結(jié)果始終為true,因此該for語(yǔ)句不會(huì)停止打印"Infinite loop"到控制臺(tái),這可能會(huì)導(dǎo)致您的計(jì)算機(jī)死機(jī)。

要修復(fù)for上面的語(yǔ)句,您需要將第二個(gè)表達(dá)式替換為該for語(yǔ)句可以達(dá)到的內(nèi)容。一個(gè)例子是使用比較運(yùn)算符 ( =<, <, >, >=)

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

同樣的錯(cuò)誤還有另一個(gè)版本。這一次,第一個(gè)表達(dá)式和第二個(gè)表達(dá)式導(dǎo)致無(wú)限循環(huán):

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

從上面的代碼可以看出,只要變量i大于,循環(huán)就會(huì)繼續(xù)0。

由于 的值i已經(jīng)大于0初始化時(shí)的值,因此第二個(gè)表達(dá)式將始終計(jì)算為true,從而導(dǎo)致無(wú)限循環(huán)。

為了修復(fù)上面的代碼,第三個(gè)表達(dá)式必須減少i而不是增加它的值:

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

另一個(gè)for可能導(dǎo)致無(wú)限循環(huán)的語(yǔ)句示例是省略括號(hào)內(nèi)的所有三個(gè)表達(dá)式,如下所示:

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

但是上面的代碼只能是故意寫的,所以除非你想讓你的電腦崩潰,否則你不應(yīng)該在你的項(xiàng)目中使用它。

盡管for您編寫的語(yǔ)句肯定會(huì)比上面的示例更復(fù)雜,但您仍然可以使用相同的原則來(lái)查找和修復(fù)語(yǔ)句中的錯(cuò)誤。

首先,您需要確保放在for語(yǔ)句中的第二個(gè)表達(dá)式實(shí)際上可以計(jì)算為false.

如果第二個(gè)表達(dá)式已經(jīng)正確,則開始檢查第一個(gè)和第三個(gè)表達(dá)式。第一個(gè)表達(dá)式是否初始化了一個(gè)true在執(zhí)行第二個(gè)表達(dá)式時(shí)始終計(jì)算為的值?

最后,第三個(gè)表達(dá)式是否正確遞增或遞減第一個(gè)表達(dá)式中初始化的變量的值?

總結(jié)一下:首先檢查你的第二個(gè)表達(dá)式,然后按順序檢查第一個(gè)和第三個(gè)表達(dá)式。

接下來(lái),讓我們學(xué)習(xí)如何修復(fù)由while語(yǔ)句引起的無(wú)限循環(huán)。

在 while 語(yǔ)句中修復(fù)無(wú)限循環(huán)

一個(gè)while語(yǔ)句可以導(dǎo)致無(wú)限循環(huán),當(dāng)條件表達(dá)式括號(hào)始終計(jì)算里面放true:

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

為了防止無(wú)限循環(huán),while 語(yǔ)句的條件表達(dá)式必須能夠計(jì)算為false。

編寫while語(yǔ)句時(shí)最常見的錯(cuò)誤之一是忘記修改用于條件表達(dá)式的變量的值。

請(qǐng)注意i以下示例中 never的值如何更改:

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

您需要增加語(yǔ)句體i內(nèi)部的值,while以便在false執(zhí)行循環(huán)時(shí)條件表達(dá)式的計(jì)算結(jié)果為:

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

無(wú)論您的while語(yǔ)句多么復(fù)雜,您都需要確保括號(hào)內(nèi)的條件表達(dá)式while()可以計(jì)算為false.

如果仍然找不到導(dǎo)致無(wú)限循環(huán)的原因,則可以使用該console.log()語(yǔ)句打印條件表達(dá)式使用的變量的值:

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

控制臺(tái)日志可以幫助您查明錯(cuò)誤的代碼行并修復(fù)它。

總結(jié)

到此這篇關(guān)于怎么檢測(cè)和防止JavaScript死循環(huán)的文章就介紹到這了,更多相關(guān)檢測(cè)和防止js死循環(huán)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • js前端實(shí)現(xiàn)登錄拼圖驗(yàn)證功能

    js前端實(shí)現(xiàn)登錄拼圖驗(yàn)證功能

    行為驗(yàn)證碼通過用戶的操作來(lái)完成驗(yàn)證,常見的行為驗(yàn)證碼有拖動(dòng)式和點(diǎn)觸式,下面這篇文章主要給大家介紹了關(guān)于js前端實(shí)現(xiàn)登錄拼圖驗(yàn)證功能的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-02-02
  • 用vbs實(shí)現(xiàn)的連連看在線游戲

    用vbs實(shí)現(xiàn)的連連看在線游戲

    大家可以參考下代碼,發(fā)現(xiàn)這個(gè)真?zhèn)€不錯(cuò)的思路
    2008-07-07
  • js滾輪事件兼容性問題需要注意哪些

    js滾輪事件兼容性問題需要注意哪些

    這篇文章主要為大家詳細(xì)介紹了js滾輪事件需要注意的兼容性問題,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • 深入了解Hybrid App技術(shù)的相關(guān)知識(shí)

    深入了解Hybrid App技術(shù)的相關(guān)知識(shí)

    這篇文章主要介紹了深入了解Hybrid App技術(shù)的相關(guān)知識(shí),Hybrid App(混合模式移動(dòng)應(yīng)用)是指介于web-app、native-app這兩者之間的app,兼具" Native App良好用戶交互體驗(yàn)的優(yōu)勢(shì) "和" Web App跨平臺(tái)開發(fā)的優(yōu)勢(shì) ",需要的朋友可以參考下
    2019-07-07
  • BootStrap與Select2使用小結(jié)

    BootStrap與Select2使用小結(jié)

    這個(gè)select2組件的功能確實(shí)很強(qiáng)大,可以將圖片放入到select里面隨著文字一起顯示。接下來(lái)通過本文給大家分享BootStrap與Select2使用小結(jié),需要的朋友參考下
    2017-02-02
  • 微信小程序?qū)崿F(xiàn)YDUI的ScrollNav組件

    微信小程序?qū)崿F(xiàn)YDUI的ScrollNav組件

    這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)YDUI的ScrollNav組件,滾動(dòng)導(dǎo)航效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • 干貨分享:讓你分分鐘學(xué)會(huì)javascript閉包

    干貨分享:讓你分分鐘學(xué)會(huì)javascript閉包

    干貨分享:讓你分分鐘學(xué)會(huì)javascript閉包,如何才能快速學(xué)會(huì)javascript閉包,本文為大家揭曉
    2015-12-12
  • 躲避這些會(huì)改變?cè)瓟?shù)組JavaScript數(shù)組方法讓開發(fā)流暢無(wú)阻

    躲避這些會(huì)改變?cè)瓟?shù)組JavaScript數(shù)組方法讓開發(fā)流暢無(wú)阻

    JavaScript中有些數(shù)組的操作方法并不符合我們預(yù)期,容易導(dǎo)致想象不到的結(jié)果,因此,為避免這種情況的發(fā)生,本文將介紹哪些原生數(shù)組方法能改變?cè)瓟?shù)組以及我對(duì)于如何更好地使用數(shù)組方法的建議
    2023-05-05
  • 微信小程序常用表單組件的使用詳解

    微信小程序常用表單組件的使用詳解

    本文主要為大家介紹了微信小程序中常用的幾個(gè)表單組件的使用方法,例如:button、CheckBox、input、form等,感興趣的可以了解一下
    2022-03-03
  • JavaScript中使用Callback控制流程介紹

    JavaScript中使用Callback控制流程介紹

    這篇文章主要介紹了JavaScript中使用Callback控制流程介紹,本文講解了callback的一些問題和優(yōu)化后的寫法并給出代碼實(shí)例,需要的朋友可以參考下
    2015-03-03

最新評(píng)論