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

推薦する

Linux でログインタイムアウト後に非アクティブなユーザーを自動的にログアウトする

方法1: .bashrcまたは.bash_profileファイルを変更するこれは、ホーム ディレクト...

仮想マシンクローン Linux centos6.5 システム ネットワーク カード構成グラフィック チュートリアル

Linux システムに触れたばかりの初心者として、VMware 仮想マシンに CentOS6.5 シ...

フォームのデフォルトの送信方法を変更する方法

htmlのデフォルトの送信方法は、postではなくgetです。postに変更したい場合は、 meth...

フロントエンドは画像を遅延ロードする方法を知っている必要があります(3つの方法)

目次1. 遅延読み込みとは何ですか? 2. 遅延読み込みを実装する🌄: 2.1 最初の方法: 2.2...

Tomcat および Web アプリケーションの Docker デプロイメントの実装

1.dockerをオンラインでダウンロードする yum インストール -y epel-release...

Visual Studio Code + Reactをベースに開発環境を構築するプロセス

開発環境ウィンドウ開発ツール Visual Studio Codeノードのインストールとnpm Wi...

Windows での MySQL 5.7.18 のインストールと設定のチュートリアル

この記事では、WindowsでのMySQL 5.7.18のインストールと設定のチュートリアルを参考ま...

Dockerはポートを介してコンテナに接続します

Dockerコンテナ接続1. ネットワークポートマッピングPythonアプリケーション用のコンテナを...

Vueはログインタイプの切り替えを実装します

この記事では、ログインタイプの切り替えを実装するためのVueの具体的なコードを例として紹介します。具...

JavaScript 手ぶれ補正のケーススタディ

原理手ぶれ補正の原理は、イベントをトリガーすることはできますが、イベントがトリガーされてから n 秒...

JavaScript のプライベート クラス フィールドと TypeScript のプライベート修飾子の詳細な説明

目次JavaScript のプライベート クラス フィールドとプライバシーの必要性JavaScrip...

W3C チュートリアル (13): W3C WSDL アクティビティ

Web サービスは、アプリケーション間の通信に関係します。 WSDL は、XML ベースの Web ...

CSS3の3D効果を使って立方体を作成する

CSS3 の 3D 効果を使用して立方体を作成する方法を学ぶと、3D シーンの回転と変位のプロパティ...

MySQLは現在の日付と時刻を取得する関数

現在の日付 + 時刻 (日付 + 時刻) を取得する関数: now() mysql> now(...

Angular CLI リリース パスの構成項目の簡単な分析

序文プロジェクトのリリースでは、常に特定の状況に応じたパッケージ化が必要です。Angular CLI...