[JS] CLOSURE
1506 ワード
このブログはインフラストラクチャの授業をまとめた文章です。 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
は不要な集合によって消去されず、参照された状態となる.
モジュールは、領域変数を外部から保護し、関数コンテキストの終了時に消えない領域変数を作成します.
Reference
この問題について([JS] CLOSURE), 我々は、より多くの情報をここで見つけました
https://velog.io/@wldns12378/JS-CLOSURE
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
Reference
この問題について([JS] CLOSURE), 我々は、より多くの情報をここで見つけました https://velog.io/@wldns12378/JS-CLOSUREテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol