JavaScript クロージャーはどのように機能しますか?
P粉494151941
P粉494151941 2023-08-22 10:16:45
0
2
364
<p>JavaScript クロージャの概念 (関数、変数など) は理解しているが、クロージャ自体は理解していない人にクロージャを説明するにはどうすればよいでしょうか? </p> <p>ウィキペディアにあるスキームの例を見ましたが、残念ながら役に立ちませんでした。 </p>
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 学習者の迅速な成長を支援します!