JavaScriptの無限ループを検出して防止する方法の詳細な説明

JavaScriptの無限ループを検出して防止する方法の詳細な説明

序文

Js デッド ループはどのようにして発生しますか?実際、コードを書くときに注意を払わなかったり、何かを見逃したりすると、次のコードに示すように、無限ループを記述することになります。

i++ が書かれていない場合、これは無限ループです。無限ループの結果を知りたい場合は、自分で試してみるのもよいでしょう。

無限ループとは、ループを終了できない不正な条件を持つ JavaScript コードです。

無限ループは、コードを実行している環境 (ブラウザーまたは NodeJS サーバー) でコンピューターがクラッシュまたはフリーズし、応答が停止する可能性があるため、危険です。

for 文と while 文は無限ループの一般的な原因であるため、このチュートリアルでは、これらの文によって発生する無限ループを検出して修正する方法を説明します。

まず、 for ステートメント内の無限ループを修正しましょう。

for文の無限ループを修正

for 文では、2 番目の式 (条件式) に比較演算子ではなく代入演算子を誤って配置すると、無限ループが発生する可能性があります。

以下は、無限ループが発生する for ステートメントの例です。 2 番目の式では i = 10 となっていることに注意してください。

(i = 0; i = 10; i++ とします) {
  console.log("無限ループ");
}

for ステートメントでは、ループを終了するために 2 番目の式が false と評価される必要があります。上記の例では、i < 10 や i > 10 のような比較演算子の代わりに、代入演算子 i = 10 が条件式として配置されています。

代入演算子は常に true と評価されるため、for ステートメントはコンソールに「無限ループ」の出力を停止せず、コンピューターがフリーズする可能性があります。

上記の for ステートメントを修正するには、2 番目の式を for ステートメントで到達可能なものに置き換える必要があります。例としては、比較演算子(=<、<、>、>=)の使用が挙げられます。

// 2番目の式は<に置き換えられます
(i = 0; i < 10; i++ とします) {
  console.log("無限ループ");
}

同じエラーの別のバージョンがあります。今回は、最初の式と 2 番目の式によって無限ループが発生します。

(i = 5; i > 0; i++ とします) {
  console.log("無限ループ");
}

上記のコードからわかるように、変数 i が 0 より大きい限りループは継続されます。

i の値は初期化時にすでに 0 より大きいため、2 番目の式は常に true と評価され、無限ループが発生します。

上記のコードを修正するには、3 番目の式で i の値を増分するのではなく減分する必要があります。

(i = 5; i > 0; i--とします) {
  console.log("無限ループ");
}

無限ループが発生する可能性がある for ステートメントの別の例は、次のように括弧内の 3 つの式がすべて省略されている場合です。

のために (;;) {
  console.log("無限ループ");
}

ただし、上記のコードは意図的にのみ記述する必要があるため、コンピューターをクラッシュさせたくない場合は、プロジェクトで使用しないでください。

実際に記述する for ステートメントは上記の例よりも確かに複雑になりますが、同じ原則を使用して for ステートメント内のエラーを見つけて修正することができます。

まず、for ステートメント内に配置する 2 番目の式が実際に false と評価されることを確認する必要があります。

2 番目の式が正しい場合は、1 番目と 3 番目の式のチェックを開始します。最初の式は、2 番目の式が実行されたときに常に true と評価される値を初期化しますか?

最後に、3 番目の式は、最初の式で初期化された変数の値を正しく増分または減分しますか?

要約すると、まず 2 番目の式をチェックし、次に 1 番目と 3 番目の式をこの順序でチェックします。

次に、while ステートメントによって発生する無限ループを修正する方法を学びましょう。

while文の無限ループを修正

while ステートメントでは、括弧内の条件式が常に true と評価される場合、無限ループが発生する可能性があります。

(真)の間{
  console.log("無限ループ");
}

無限ループを防ぐには、while ステートメントの条件式が false と評価される必要があります。

while ステートメントを書くときに最もよくある間違いの 1 つは、条件式で使用される変数の値を変更することを忘れることです。

次の例では、 の値が never どのように変化しないかに注意してください。

i = 0 とします。
 
(i < 6) の間 {
  console.log("無限ループ");
}

ループの実行時に条件式が false と評価されるように、while ステートメントの本体内で i の値を増分する必要があります。

i = 0 とします。
 
(i < 6) の間 {
  console.log("無限ループ");
  私は++;
}

while ステートメントがどんなに複雑であっても、while() 括弧内の条件式が false と評価されることを確認する必要があります。

それでも無限ループの原因がわからない場合は、console.log() ステートメントを使用して、条件式で使用される変数の値を出力できます。

i = 0 とします。
 
(i < 6) の間 {
  console.log("無限ループ");
  私は++;
  コンソールにログ出力します。
}

コンソール ログは、エラーのあるコード行を特定して修正するのに役立ちます。

要約する

JavaScript の無限ループを検出して防止する方法についての記事はこれで終わりです。js の無限ループを検出して防止する方法の詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • JavaScript で無限ループを検出する方法(例付き)

<<:  CSS により、子コンテナが親要素を超えます (子コンテナは親コンテナ内で浮動します)

>>:  Ubuntu Dockerのインストールと使い方

推薦する

CSS モジュールソリューション

CSS のモジュール ソリューションは、JS のモジュール ソリューションと同じくらい多く存在すると...

MySQLデータベースバックアップのさまざまな実装方法の概要

この記事では、MySQL データベースのバックアップを実装するさまざまな方法について説明します。ご参...

vue3 の setUp とリアクティブ関数の使用方法の詳細な説明

1. いつsetUpを実行するかvue3 ではメソッドを正常に使用できるようになったことは誰もが知っ...

CSS を使用して 3 列レイアウトを実装するサンプル コード。中央の列は適応型で、テキスト サイズに応じて幅が変わります。

Baiduのインタビューで遭遇する質問は、次のレイアウト効果を達成する必要がある。 中央の紫色の列...

Dockerコンテナが外部ネットワークにpingできない問題を解決する

今日、docker で redis 環境を構築していたところ、yum がリソースを取得できず、インタ...

Windows に MySQL 5.7.18 の解凍バージョンをインストールするチュートリアル

1. インストールプロセスMySQL バージョン: 5.7.18 1. my.ini ファイル(簡易...

Windows 7 64 ビットに最新バージョンの MySQL サーバーをインストールする方法のグラフィック チュートリアル

最近、MySQL データベースを勉強していて、設定ファイルを頻繁に変更したため、MySQL データベ...

CSS ハック \9 と \0 は IE11\IE9\IE8 のハッキングには機能しない可能性があります

Web ページやフォームを設計するたびに、さまざまなブラウザ、特に IE ファミリの互換性の問題に悩...

ウェブサイトアイコンを追加するにはどうすればいいですか?

最初のステップは、アイコン作成ソフトウェアを準備することです。まず、いわゆるアイコンは拡張子 .ic...

Linux7で仮想ホストを実装する3つの方法

1. 同じIPアドレス、異なるポート番号仮想ホスト 1: ホスト IP アドレスは 172.16.3...

JavaScript オブジェクト指向クラス継承ケースの説明

1. オブジェクト指向のクラス継承これまでの章では、JavaScript のオブジェクト モデルがプ...

IDEA 構成の Tomcat 起動エラーの問題を解決する

異なるサーブレット パスを構成するときに、次の 2 つのエラーが発生しました。 java.lang....

Tomcat の静的ページ (html) で中国語の文字化けが発生する問題の究極の解決策

tomcatでは、jspは文字化けしませんが、htmlの中国語は文字化けします理由はいくつかあります...

Vuexの特性と機能の詳細な説明

目次Vuex とは何ですか? Vuexの5つの特性vuex の State 機能とは何ですか? vu...

LinuxシステムでのSystemC環境設定方法

以下はcentos7での設定方法ですsystemc ソース パッケージをダウンロード: System...