[js]Scopeの理解

2037 ワード

グループ学習🦆 アヒルと一緒に!
<ディレクトリ>
1.スコフラン?
2.鏡の種類
3.オーバーラップスキャン
4.装飾チェーン

1.スコフ(socpe)とは?


scopeは「範囲」を表し、変数の範囲を表す.
jsエンジン変数がどこに格納されているか、有効範囲がどこにあるかを教えます.
またはjsエンジンが識別子(変数がメモリに格納されている名前)を検索する際に使用するルールです.
もし、もし
var a =2;
console.log(a)
ここからaの値を知る過程は、
1▁▁jsエンジンが現在稼働中であり、対応するScopeでaという変数があるかどうかを検索します.
ヽoo 2πjsエンジン変数aが対応する範囲内でアクセス可能であれば、aの値を検索する.
3愈aの値を取ってコンソールに来ます.log()に渡す.

2.鏡の種類


1.グローバルスキャン


グローバルスキャンは、jsエンジンで変数を見つけることができます.
var a =2;
function test(){
  console.log(a); //2
 }
 console.log(a); //2
 test();
 ✨ 블럭 내에서도 외부에서도 어디서든 a에 접근할 수 있다! 

2.エリアスキャン


{}は、関数内でのみ使用できます.
変数に外部からアクセスできません.
関数内で外部変数にアクセスできます.
var a =2;
function test(){
   var b = 3;
   console.log(b); //3;
   console.log(a); //2
 }
 console.log(a); //2
 console.log(b); //⛔️ ReferenceError 
 test();

3.オーバーラップスキャン


コードブロック内には他のブロックをネストすることができ、関数内には他の関数をネストすることができる.
これは、スキャンも重なり、1つのスキャンではなく複数のスキャンが生成されることを意味する.
const a = '나는 전역';

function outer() {
	console.log(a); 
	const a = 'outer의 변수';
	
	function inner() {
		console.log(a);
	}
    inner();
}
outer();
!!Quiz
関数のコンソール値、aの値は何ですか?
.
.
.
🙅‍♀️ : '「私は戦区です」
🙆‍♀️ : '外部関数の変数
グローバル(グローバル)スキャン:変数aと関数outer().
領域スキャン:outer関数内の変数aとinner()関数.
関数内ではouter関数も上位レベルで、内層関数も下位レベルです.
1πjsエンジンは、まず、現在実行されているサブスキャン(内部関数)に変数があるかどうかを検索します.
2▁▁▁該当する変数が見つからない場合は、親ミラー(outer関数)に移動して変数を検索します.

ここでは、サブスキャンが親スキャンを参照できることがわかります.
すなわち、エンジンは現在実行されているscopeで変数を検索し、変数が見つからない場合は親scopeにアップグレードし、変数が見つかるまで最後のグローバル(グローバル)にアップグレードします.変数が見つかったら、エンジンは変数を探すのを止めます.
このようにスキャンを使用すると、変数名の重複衝突を回避できます.

4.装飾チェーン


オーバーラップスキャンでは,コードブロック内部に上弦スキャン下弦スキャンのように,スキャンの女性スキャンを階層的に接続する.