[JS] CLOSURE


このブログはインフラストラクチャの授業をまとめた文章です。 ES 5を基準に勉強しながらブログを書く

CLOSURE


モジュールの事前定義-閉じる/閉じる/完全性
mdnでは、このように定義されている.
Closerは、関数とその宣言時の語彙環境の組合せです。

個人的にはすべてのモジュールに関する1行の定義を見ましたが、納得できる言い方はないようです.
キャビネットはまず特殊な現象で発生します.
function outer() { var num = 1; function inner() { return num++; } return inner; } var plusNumber = outer(); console.log(plusNumber()); console.log(num); グローバルコンテキストを開く 外部関数、plusNumber変数を環境レコードに収集 グローバルコンテキスト上で行単位で実行 コールアウト outer関数のコンテキストが開きます。 num変数、環境レコードに内部関数を収集する 外付けコード ->numに1を割り当てる ->内部関数を返す 外部コンテキストを閉じてグローバルコンテキストに戻る 内部関数はplusNumberに割り当てられています plusNumberの実行時に内部実行コンテキストを開く numという変数を検索するために、環境レコードを参照しましたが存在しません。そのため、外部環境リファレンスにアクセスしてnumを参照します。 したがってplusNumber()のコンソールはnumの値にアクセスすることで出力される ただしnumを出力すると、現在のコンテキストの環境レコードにnumが存在しないため、未定義またはエラーが発生します。

上記の例は、エンクロージャの特殊な状況が発生した場合です.
コンソールの結果を表示すると、plusNumberが呼び出されたときに返されるnumの値は正常に出力されますが、num自体を出力しようとするとundefinedが返されます.このnumという変数は現在Closure現象に属している.
モジュールは、実行コンテキストAで宣言されたBから함수で宣言されたAを参照する.변수という関数は、Bの他のコンテキストで呼び出されるのではなく、Aのコンテキストが終了しても、Aで宣言されたAは不要な集合によって消去されず、参照された状態となる.
モジュールは、領域変数を外部から保護し、関数コンテキストの終了時に消えない領域変数を作成します.