JavaScriptスキャンと実行コンテキスト
スキャン
簡単に言えば、JavaScript変数の範囲にアクセスできることを意味します.
JavaScript Scopeには大まかにグローバルScopeと関数Scopeが存在する.
グローバルスキャン
// 전역 스코프 here
var example = 'global_scope';
function functionScope(){
console.log(example);
}
functionScope(); //global_scope가 출력됨
全局顕微鏡はJS顕微鏡の中で最も外側にある.上記のコードでは、変数exampleと関数functionScopeがグローバルに宣言されています.
かんすうそういん
var example = 'global_scope';
function functionScope(){
// 함수 스코프 here
var example = 'function_scope';
console.log(example);
}
functionScope(); //function_scope가 출력됨
グローバルスキャンで関数を呼び出すと、関数スキャンが生成されます.関数で宣言された領域変数は、その関数の範囲内でのみ影響を与えます.
に飾りを付ける
関数は内関数から外関数への体化である.
function outerScope(){
let value = 'scopeValue';
return function innerScope(){
console.log(value);
}
}
let inner = outerScope();
inner();
関数を実行するときは、まず自分の関数スキャン内で値を検索し、存在しない場合は自分の外部スキャンで値を検索する形でフィルタします.上のコードではouterScopeとinnerScopeが互いにScopeに接続されています.
内部実行後、まずinnerScopeのScopeで変数値を検索します.
valueがない場合は、フィルタ外部Scopeで変数valueを検索して画面に出力します.
でんしけんびきょう
スキャンは、関数の実行時に不確定であり、コード宣言の位置によって決定されます.
let value = 'global';
function inner(){
console.log(value);
}
function outer(){
let value = 'outer';
inner();
}
outer();
例えば、上記のコードでは、内外スキャンが実現されていないため、外部から内部を呼び出しても外部は画面に出力されない.LexicalScopeによって決定され、Scopeはコード宣言位置によって決定されるため、問題が発生します.
実行コンテキスト
関数を実行すると、コンテキストも作成されます.
デフォルトでは、コンテキストはthisとパラメータ、宣言された変数、scofficingから構成されます.
関数が終了すると、各コンテキストは自動的に消えます.
実行コンテキストも、主にグローバルコンテキストと関数コンテキストから構成されます.
コンテキスト作成順序の実行
//global Context
let value = 'global';
function localContext(val){
console.log(val);
}
localContext(value);
実行コンテキストを生成する順序は次のとおりです.JSコードの実行後にグローバルコンテキストが生成されます.
グローバルコンテキストのデフォルト値thisはwindowで、上記の例では変数に値とlocalContextがあります.
グローバルコンテキストの作成後に関数を実行すると、関数コンテキストが作成されます.
関数コンテキストのthisは、newキーワードまたは、bindまたはcallで変更でき、コンテキストのパラメータ、変数情報、scope生成情報が含まれます.
関数が終了すると、作成した関数コンテキストも消えます.
エンクロージャ
Closerは、関数と関数が宣言する語彙環境の組合せです.
function createClosure(){
var innerValue = 'inner';
return function(){
console.log(innerValue);
}
}
var outer = createClosure();
outer();
コードの説明後、createClosure関数はinnerValue変数を内部で宣言し、匿名関数を返す関数です.outer変数は、createClosure関数が返す匿名関数を受け入れます.
createClosure関数を呼び出すと、関数コンテキストが生成されます.
innerValue変数は、このcreateClose関数内で宣言され、コンテキストに格納されます.
createClosureが返す匿名関数は相互に関連付けられており、innerValueを参照して使用できます.
createClosureがすべて実行されると、コンテキストも消えます.
翼網関数は、消えたコンテキストのinnerValueを参照するため、createCloseコンテキストが消えてもこの値を使用できます.
この関数以外の他のスコフでは、コンテキストは消え、innerValueにアクセスできません.
このようにして、変数を隠匿化、カプセル化することができる.
Reference
この問題について(JavaScriptスキャンと実行コンテキスト), 我々は、より多くの情報をここで見つけました https://velog.io/@lacomaco/자바스크립트-스코프テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol