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

推薦する

Ubuntu 18.04 のsources.listをAlibabaまたはTsinghuaミラーに変更する方法

1. バックアップソースリストUbuntu のデフォルトのソースは国内サーバーではないため、更新され...

非常に優れた CSS スキル 10 選のコレクションと共有

ここでは、CSS テクニックを巧みに使用することで、HTML を変更せずにブログやテンプレートの外観...

HTMLメタの大きな役割

メタ属性には、name と http-equiv の 2 つがあります。 name 属性は主に、We...

JSでES6クラスの使い方をすぐにマスター

1. どのように構築しますか? es5 でクラスを構築する一般的な方法を確認しましょう。まず、es5...

Linux で MySQL のルート パスワードを変更する方法

序文このサービスは数か月前からMySQLに導入されています。私の仕事は基本的にターミナルで行われるた...

CentOS 7 で PHP 5.4 を 5.6 にアップグレードする方法の簡単な分析

1.ターミナルに入ったらPHPのバージョンを確認するphp -v出力は次のようになります。 PHP ...

JavaScript フォーム検証の例

HTML フォームは、名前、電子メール アドレス、場所、年齢などのユーザー情報を収集するためによく使...

Layui は複数条件クエリのサンプルコードを実装します

最近ファイルシステムを作ったのですが、フィールドが多すぎることに気づきましたページングを使用した複数...

MySQL 8で追加された3つの新しいインデックスは、非表示、降順、関数です。

目次MySQL 8 の隠しインデックス、降順インデックス、関数インデックス1. 隠しインデックス1....

CSS の位​​置属性 (absolute|relative|static|fixed) の概要と応用

まず、CSS3 Api の position 属性の定義を見てみましょう。 static: 特別な配...

React + Threejs + Swiper パノラマ効果を実現するための完全なコード

パノラマビュー効果を見てみましょう: 住所を表示スクリーンショット: 体験してみると、周囲の環境がぐ...

MySQLクエリのパフォーマンスに影響を与える大きなオフセットの理由と最適化の詳細な説明

序文MySQL クエリは select コマンドを使用し、limit および offset パラメー...

SQLは、隣接する2行のデータに対して加算、減算、乗算、除算の演算を実行します。

SQL は、データを特定の順序で並べ替え、特定のフィールドでグループ化した後、隣接する 2 つのデ...

HTML から PDF への変換事例の概要 (複数の画像を推奨)

仕事の都合上、最近 HTML を PDF に変換する機能について調べることに時間を費やしました。 H...

PrometheusとGrafanaを使用したMySQLサーバーのパフォーマンス監視の詳細な説明

概要Prometheus は、HTTP プロトコルを介してリモート マシンからデータを収集し、ローカ...