[TIL]Javascriptコンセプト
7835 ワード
きょう習った
Javascriptコンセプト
スキャン
スコットランド?
スコットランド?
すべてのプログラミング言語の基本概念は、識別子の有効範囲を表す.
Javascriptでは、他の言語とは異なるscopeの特徴があります.
変数、関数などの識別子は、宣言された位置によって自分の有効範囲を決定します(他のコードは自分の範囲を参照できます).
この範囲をスコップリーと呼ぶ.
識別識別子
var x = 'global';
function foo() {
var x = 'local';
console.log(x); // 1번 / local
}
foo();
console.log(x); // 2번 / global
上記の例では、同じ変数名を持つ2つの識別子があります.1つはグローバル変数で、任意の場所で参照できます.
1つはfoo関数内部で宣言された変数であるため、関数内部でのみ参照できます.
名前は同じですが、別の変数です.
JavaScriptエンジンはコンソールです.log(x)に遭遇した場合、どの変数を識別子決定(identifier resolution)と呼ぶべきかを決定する.
ネーミングスペース
コンセプトがない場合は、プログラム全体に同じ名前の変数しかありません.
プログラミングでは、このスキャン(有効範囲)の概念により、変数名の競合を防止し、同じ名前の変数を使用できるようにします.
ひょうほん
パーティション説明scope変数グローバルコードの最外領域グローバルscopeグローバル変数領域関数本体内部領域scope領域変数
変数は自分が宣言した位置によって決まる.
グローバル宣言の変数にはグローバルスキャンがあり、関数内部で宣言された変数にはゾーンスキャンがあります.
var x = 'global';
function foo() {
var x = 'local';
console.log(x); // 1번 / local
}
foo();
console.log(x); // 2번 / global
ここで同様に,関数内部には宣言されたx変数のほかに,同名のグローバル変数も存在する.foo関数でxを参照すると、グローバル変数ではなく関数内部で宣言されたx変数が参照されます.
これをIdentifier Resolutionと呼び、javascriptエンジンはスキャンチェーンを介してこの識別子検索を行うことができます.
ひょうじチェーン
💡 関数には、関数の重ね合わせと呼ばれる関数を定義できます.
関数で定義されている関数はネストされた関数です.
このオーバーラップ関数を含む関数を外部関数と呼びます.
関数はオーバーラップするので、スキャンはオーバーラップしてもよく、スキャンは関数のオーバーラップによって階層構造を構成する.(宇宙チェーン)
JAvascriptエンジンは、参照変数のコードをスキャンするスキャンから開始します.
上方向に移動し、識別子検索を行います.したがって、親ミラーが宣言する変数を
サブ顕微鏡下でも参照できます.
かんすうレベルそうさ
コードブロックではなく関数のみで領域スキャンを生成します.
💡 ブロックレベルスキャン:すべてのコードブロック(if、for、while...)、および関数ローカルスキャンを生成します.ほとんどの言語でブロックレベルスキャンが生成されます.
varキーワードとして宣言された変数は、関数コードブロックのみを領域スキャンとして使用します.
しかし、いくつかの問題があるかもしれません.
ex)
var i = 10;
// for 문에서 선언한 i는 전역 변수다.
// 이미 선언된 전역 변수 i가 있으므로 중복 선언된다.
for (var i = 0; i < 5; i++) {
console.log(i); // 0 1 2 3 4
}
// 의도치 않게 변수의 값이 변경되었다.
console.log(i); // 5
varとして宣言された変数は関数レベルのスキャンに適しているため、文以外でも使用できます.(同じ関数のみ)そのため、思わぬ動きが生じる可能性があります.
だから出てきたのはES 6に導入されたlet,constです.これはブロックレベルスキャンをサポートします.
でんしけんびきょう
例)
var x = 1;
function foo() {
var x = 10;
bar();
}
function bar() {
console.log(x);
}
foo(); // ?
bar(); // ?
結果値はbar関数の親スキャンが何であるかによって異なります.ダイナミックスキャン
関数をどこから呼び出すかに基づいて、親スキャンを決定します.
このようにスケーリングを決定し、上記の例ではbarの位相スケーリングはfoo関数のスケーリングである.
でんしけんびきょう
親スキャンは、どこで定義された関数に基づいて決定されます.静的ソプラノとも呼ばれます.
関数定義を評価すると、位相スキャンが静的に決定されます.
JAvascriptはこのスクリプトに従います.
では、呼び出されたとき、自分の上司のスコフをどうやって知るのでしょうか.
関数定義を実行して生成された関数オブジェクトは、決定された親スキャンを記憶します.
したがって、関数をどこから呼び出すかは重要ではなく、関数を定義する場所に基づいて親スキャンを決定します.
Reference
この問題について([TIL]Javascriptコンセプト), 我々は、より多くの情報をここで見つけました https://velog.io/@jisu129/TIL-Javascript-개념-wy3szg2mテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol