[js]Scopeの理解
2037 ワード
グループ学習🦆 アヒルと一緒に!
<ディレクトリ>
1.スコフラン?
2.鏡の種類
3.オーバーラップスキャン
4.装飾チェーン
scopeは「範囲」を表し、変数の範囲を表す.
jsエンジン変数がどこに格納されているか、有効範囲がどこにあるかを教えます.
またはjsエンジンが識別子(変数がメモリに格納されている名前)を検索する際に使用するルールです.
もし、もし
1▁▁jsエンジンが現在稼働中であり、対応するScopeでaという変数があるかどうかを検索します.
ヽoo 2πjsエンジン変数aが対応する範囲内でアクセス可能であれば、aの値を検索する.
3愈aの値を取ってコンソールに来ます.log()に渡す.
グローバルスキャンは、jsエンジンで変数を見つけることができます.
{}は、関数内でのみ使用できます.
変数に外部からアクセスできません.
関数内で外部変数にアクセスできます.
コードブロック内には他のブロックをネストすることができ、関数内には他の関数をネストすることができる.
これは、スキャンも重なり、1つのスキャンではなく複数のスキャンが生成されることを意味する.
関数のコンソール値、aの値は何ですか?
.
.
.
🙅♀️ : '「私は戦区です」
🙆♀️ : '外部関数の変数
グローバル(グローバル)スキャン:変数aと関数outer().
領域スキャン:outer関数内の変数aとinner()関数.
関数内ではouter関数も上位レベルで、内層関数も下位レベルです.
1πjsエンジンは、まず、現在実行されているサブスキャン(内部関数)に変数があるかどうかを検索します.
2▁▁▁該当する変数が見つからない場合は、親ミラー(outer関数)に移動して変数を検索します.
ここでは、サブスキャンが親スキャンを参照できることがわかります.
すなわち、エンジンは現在実行されているscopeで変数を検索し、変数が見つからない場合は親scopeにアップグレードし、変数が見つかるまで最後のグローバル(グローバル)にアップグレードします.変数が見つかったら、エンジンは変数を探すのを止めます.
このようにスキャンを使用すると、変数名の重複衝突を回避できます.
オーバーラップスキャンでは,コードブロック内部に上弦スキャン下弦スキャンのように,スキャンの女性スキャンを階層的に接続する.
<ディレクトリ>
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.装飾チェーン
オーバーラップスキャンでは,コードブロック内部に上弦スキャン下弦スキャンのように,スキャンの女性スキャンを階層的に接続する.
Reference
この問題について([js]Scopeの理解), 我々は、より多くの情報をここで見つけました https://velog.io/@tpfla9801/js-스코프-이해하기-1장テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol