13/スキャン


スキャン
各識別子は、宣言された場所によって、他のコードが参照する範囲を決定します.
この有効範囲を指します.
JavaScriptエンジンがコードに同じ名前の変数が2つある場合、識別子決定と呼ばれるどの変数を参照する必要がありますか.このとき、エンジンは(識別子を検索する際に使用されるルール)をスキャンすることによって、参照する変数を決定します.スキャンにより識別子変数名の競合を防止し、同名変数を使用できます.(顕微鏡内では識別子は一意でなければならないが、他の顕微鏡では同名の識別子を使用することができる.)
+)Lexical環境:
コードがどこで実行されているか、周囲にどんなコードがあるかを説明します.
コードのコンテキストはLexical環境で構成されています.これを実装するのは実行コンテキストであり、すべてのコードは実行コンテキストで評価され、実行されます.
+)varキーワード:
varキーワードとして宣言された変数は、同じ範囲内で繰り返し宣言できます.
これは予想外の副作用を生じる可能性があるので、繰り返し宣言を許さないletまたはconstキーワードで変数を宣言します.
ひょうほん

≪グローバル|Global|emdw≫:コードの一番外側の領域を指します.グローバルにグローバルスキャンを作成し、グローバルに変数を宣言すると、グローバルスキャンを持つグローバル変数になります.グローバル変数はどこでも参照できます.
領域:関数体の内部を指します.ゾーンはゾーンスキャンを作成し、ゾーン変数は自分のゾーンスキャンとサブゾーンスキャンで有効です.(outer関数の内部で宣言された変数は、その領域をスキャンするouter関数の内部とサブ領域をスキャンするinner関数の内部で参照できます)
ひょうじチェーン
関数はオーバーラップしてもよく、関数の領域スキャンはオーバーラップしてもよい.
(スキャン関数のオーバーラップからなる階層構造)

このように、スタンダードが階層的に接続されているのはスタンダードチェーンと呼ばれています.
(すべての地域のスキャンプログラムの最上位スキャンプログラムはグローバルスキャンプログラムです)
JavaScriptエンジンは,スキャンチェーンを介して変数を参照するコードのスキャンから上方向に移動し,宣言された変数を検索する.
(javascriptエンジンは、コードを実行する前に、上図と同様のデータ構造の集合ループを実際に生成します...変数宣言を実行すると、変数識別子がキーとしてデータ構造に登録されます/scopeチェーンは、実行コンテキストの集合環境を一方向に接続します.グローバル集合環境は、コードロード後すぐに類似の集合ループを生成します).関数を生成し、関数を呼び出すとすぐに関数のディレクトリ環境を作成します.)
関数レベルスキャン/ブロックレベルスキャン
ブロックレベルスキャン:
関数ボディだけでなく、すべてのコードブロック(if、for、while、try/catchなど)が領域スキャンを作成します.
関数レベルのスキャン:
関数のみのコードブロック作成領域スキャンのex.varキーワード
var i = 10;

for(var i=0;i<5;i++){
	console.log(i); // 0 1 2 3 4 
}
console.log(i); // 5
varキーワードを書かないでください...
でんしけんびきょう
動的スキャン:関数を呼び出す場所に基づいて、関数の親スキャンを決定します.
静的スキャン(LexicalScope):関数を定義する場所に基づいて、関数の親スキャンを決定します.JavaScriptを含むほとんどのプログラミング言語はLexical Scopeに従います.
var x = 1;

function foo() {
	var x = 10;
    bar();
}

function bar() {
	console.log(x);
}

//bar함수는 전역에서 정의된 함수
foo(); // 1 
bar(); // 1