JavaScript クロージャの詳細

JavaScript クロージャの詳細

序文:

JavaScript部分ではクロージャが非常に重要なので、今日はクロージャに関する知識をまとめておきます。まず、クロージャを理解する前に、スコープに関する関連知識を知っておく必要があります。スコープについては以前のブログ投稿で説明しているので、ここでは繰り返しません。次に、クロージャとは何かを見てみましょう。

1. クロージャとは何ですか?

closure別の関数のスコープ内の変数にアクセスできる関数です。 ----- JavaScript上級プログラミング

簡単に言えば、クロージャとは、スコープが別の関数内のローカル変数にアクセスできるという特性を持つ関数です。

以下に簡単な例を示します。

たとえば、関数があり、その中にローカル変数を定義しているとします。他のスコープがこのローカル変数にアクセスできる場合、クロージャが生成されます。そこで、この関数内に別の関数を定義して、内部の関数スコープが外部の関数内のローカル変数にアクセスできるかどうかを確認します。

 関数f1(){
            var 数値 = 10;
            関数f2(){
                console.log(数値);
            }
            f2();
        }
        f1();

印刷された結果は次のとおりです。

値が正常に出力され、クロージャが生成されていることがわかります。
しかし、読者の中には疑問を持つ人もいるかもしれません。f2関数自体は f1 関数の中にあり、親関数の変数を使用できるのです。次に、f1 関数の外側のスコープ内の変数にアクセスし、結果を確認します。

次のように、f2 関数の呼び出しを f1 関数の戻り値に変更し、関数の外部で f1 関数を呼び出します。

 関数f1(){
            var 数値 = 10;
            関数f2(){
                console.log(数値);
            }
           f2() を返す
        }
        var f = f1();
        関数f();

この時点では、 f1 の外部のスコープがその内部関数の変数にアクセスするのと同じです。印刷結果は次のとおりです。

内部のローカル変数もここで使用でき、クロージャが生成されていることがわかります。

したがって、次のように結論付けることができます。

クロージャ:スコープは別の関数内のローカル変数にアクセスできます。

2. 閉鎖の役割

関数内で定義されたローカル変数は関数内でのみ使用でき、使用が終了すると破棄されることはご存じのとおりです。ただし、クロージャを使用すると、このローカル変数は関数の外部で使用され、外部の呼び出し元が呼び出しを終了するまで破棄されません。したがって、クロージャの役割は変数のスコープを拡張することです。

JavaScript クロージャに関するこの記事はこれで終わりです。JavaScript クロージャについてさらに詳しく知りたい方は、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続きご覧ください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • JSにおけるクロージャの役割について詳しく話しましょう
  • JavaScriptクロージャの原理と機能の詳細な説明
  • JavaScript の高度なクロージャの説明
  • JavaScript クロージャの説明
  • JavaScriptのクロージャとは何かを学びましょう

<<:  HTML Selectは、デフォルトの選択を設定するためにselected属性を使用します。

>>:  CSS でショートカット プロパティを記述する際は、トラブルの順序に注意してください (落とし穴を避けるため)

推薦する

MySQL ストアド関数(カスタム関数)の定義と使用方法の詳細な説明

ストアド関数ストアド関数とは: SQL コードの一部をカプセル化し、特定の関数を完了して、結果を返し...

Zabbix はどのようにして ssh 経由でネットワーク デバイス データを監視および取得するのでしょうか?

シナリオシミュレーション:ある会社の運用保守担当者は、以前購入した一連のネットワーク機器の光ポートの...

MySQL における制限関数と合計関数の混在使用の問題の詳細な説明

序文今日、注文データを同期した後、同僚は、合計注文金額とデータソースの合計金額に差があったため、LI...

LinuxベースのSelenium環境を構成し、操作を実装する

1. Linux で Selenium を使用する1. Chromeをインストールする次のコマンドを...

MySQLのインデックスシステムがB+ツリーを使用する理由の分析

目次1. インデックスとは何ですか? 2. インデックスはなぜ必要なのでしょうか? 3. インデック...

RHCE ブリッジング、パスワード不要のログイン、ポート番号の変更の概要

目次1. ブリッジを設定し、検証のためにパケットをキャプチャする1. ブリッジデバイスとセッションを...

超大型フォントを使用した 40 の Web ページ デザイン

今日の Web デザインでは、非常に大きなフォントが表示される傾向があります。これらのオープンソース...

Linux カーネル デバイス ドライバー仮想ファイル システムに関する注意事項

/******************** * 仮想ファイルシステム VFS **********...

Nginx レイヤー 4 負荷分散構成ガイド

1. レイヤー4負荷分散の概要レイヤー 4 ロード バランシングとは何ですか?いわゆる 4 層負荷分...

Zabbix上のすべてのホストのIPとホスト名を取得する

ザビックスZabbix ([`zæbiks]) は、WEB インターフェースに基づいて分散システム監...

ウェブページのテーブルの境界線を設定する方法

<br />前回は、Web テーブルにセルの線を設定する方法を学びました。今日は、Web...

Centos サーバーで nginx を設定する方法の例

セキュアターミナルMobaXterm_Personalをダウンロードまず、安全なターミナルをダウンロ...

すべてまたは逆の選択機能を実現するJavaScript

この記事では、全選択または選択を反転する機能を実現するためのJavaScriptの具体的なコードを参...

Navicat Premium が MySQL 8.0 に接続してエラー「1251」を報告する問題を解決する方法の分析

長い間何もしていなかった人は、努力をすると一生懸命働いていると思うようになります。 1. 問題Nav...

任意の長さの配列を作成または埋めるための JS のヒントの要約

目次序文直接充填方式for ループの push() メソッド配列コンストラクタメソッド配列コンストラ...