JavaScript クロージャーはどのように機能しますか?
P粉494151941
P粉494151941 2023-08-22 10:16:45
0
2
344

JavaScript クロージャの概念 (関数、変数など) は理解しているが、クロージャ自体は理解していない人にクロージャを説明するにはどうすればよいでしょうか?

ウィキペディアにあるスキームの例を見ましたが、残念ながら役に立ちませんでした。

P粉494151941
P粉494151941

全員に返信 (2)
P粉734486718

JavaScript では、各関数は外部の語彙環境へのリンクを維持します。字句環境は、スコープ内のすべての名前 (変数、パラメーターなど) とその値のマップです。

したがって、functionキーワードが表示されるたびに、その関数内のコードは関数の外部で宣言された変数にアクセスできます。

リーリー

関数barがパラメータxと変数tmpを閉じるため、これは16を出力します。これらは両方とも外部関数に存在します。foo

の字句環境内。

関数barは、関数foo

の字句環境へのリンクとともに、クロージャを形成します。

関数はクロージャを作成するためにreturn

を行う必要はありません。宣言だけで、各関数はそれを囲む字句環境を囲み、クロージャを形成します。

リーリー

#barのコードは、パラメータxと変数tmpが直接参照されなくなっても参照できるため、上記の関数は 16 も出力します。範囲。

ただし、tmpbarのクロージャ内にまだ存在するため、インクリメントできます。barが呼び出されるたびに増加します。

クロージャの最も単純な例は次のとおりです:

リーリー

JavaScript 関数が呼び出されると、新しい実行コンテキストecが作成されます。関数パラメータとターゲット オブジェクトに加えて、この実行コンテキストは、呼び出し元の実行コンテキストの字句環境へのリンクも受け取ります。これは、外部字句環境で宣言された変数を意味します (上記の例では、a#)。 ## およびb) にはecからアクセスできます。

すべての関数には外部の字句環境へのリンクがあるため、すべての関数はクロージャを作成します。

クロージャに表示されるのは変数そのものであり、コピーではないことに注意してください。

いいねを押す+0
    P粉904405941

    クロージャは次のペアです:

    1. 関数と
    2. 関数の外部スコープ(字句環境)への参照

    字句環境はすべての実行コンテキスト (スタック フレーム) の一部であり、識別子 (つまり、ローカル変数名) と値の間のマッピングです。

    JavaScript のすべての関数は、外部の字句環境への参照を維持します。この参照は、関数の呼び出し時に作成される実行コンテキストを構成するために使用されます。この参照により、関数がいつどこで呼び出されるかに関係なく、関数内部のコードが関数の外部で宣言された変数を「参照」できるようになります。

    関数が別の関数によって呼び出される場合、外部の字句環境への一連の参照が作成されます。このチェーンはスコープ チェーンと呼ばれます。

    次のコードでは、innerは、fooが呼び出されたときに作成される実行コンテキストの字句環境を使用してクロージャを形成し、クロージャには変数secret## が含まれています。 #:

    リーリー
    いいねを押す+0
      最新のダウンロード
      詳細>
      ウェブエフェクト
      公式サイト
      サイト素材
      フロントエンドテンプレート
      私たちについて 免責事項 Sitemap
      PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!