Scope

2444 ワード

scope定義:変数名、関数名、クラス名などの識別子は、宣言された場所に基づいて、他のコードで参照できるかどうかを決定します.
コード全体がグローバルとゾーンに分けられるため、グローバルに変数が宣言されている場合、ゾーンに変数が宣言されている場合、その変数にはゾーンスキャンがあります.
もしそうであれば、コードを実行するときに参照する変数がグローバルに存在し、領域には存在せず、グローバルにも存在する場合、コードはどの変数を参照すればいいですか?
この概念を理解するにはscopeチェーンを理解する必要があります.
関数はグローバルで定義できますが、任意の関数の内部で定義できます.これを関数の重ね合わせと呼ぶ.
関数がオーバーラップしている場合、各関数の領域スキャンはオーバーラップしていてもよい.これは、関数の重なりに応じて、スキャンが階層構造を有することができることを意味する.
次の関数のどのコンソールが撮られるか予測しましょう.
var x = "나는 전역 x야";

function outer(){
	var y = "나는 outer함수의 지역 y야";
    console.log(x);
    console.log(y);
    
    function inner(){
    var x = "나는 inner 함수의 지역 x야"
    
    console.log(x);
    console.log(y);
	}
    inner();
}
outer();
console.log(x);
console.log(y);
出力は次のとおりです.
var x = "나는 전역 x야";

function outer(){
	var y = "나는 outer함수의 지역 y야";
    console.log(x); // 나는 전역 x야
    console.log(y); // 나는 outer함수의 지역 y야
    
    function inner(){
    var x = "나는 inner 함수의 지역 x야"
    
    console.log(x); // 나는 inner 함수의 지역 x야
    console.log(y); // 나는 outer 함수의 지역 y야
	}
    inner();
}
outer();
console.log(x); // 나는 전역 x야
console.log(y); // ReferenceError 어쩌고
内部関数はouter関数の内部で宣言されるため,内部関数の位相ミラーはouter関数の位相ミラーである.グローバルで定義されたouter関数の親はグローバル範囲です.
これにより、「スキャンチェーン」と呼ばれる階層接続が物理的に存在する.
変数を参照すると、JavaScriptエンジンはスキャンチェーンを介して変数を参照します.ミラーチェーンで変数を参照する場合は、上を向く必要があります.したがって、サブミラーが親ミラーの変数を参照できるのは、ミラーチェーンの一方向性のためである.
スキャンレベルによって、ブロックレベルスキャンと関数レベルスキャンを区別できます.ほとんどのプログラミング言語は、if文、for文などのすべてのコードブロックを使用して、関数体とともに領域スキャンを作成します.これらの特性はブロックレベルのcopyであり、JavaScriptではvarキーワードとして宣言された変数は関数コードブロックのみを領域copyとしている.これは関数レベルのcopraです.
JavaScriptで他のプログラミング言語と同じように動作するために、let、constはes 6に表示されます.es 6の後、let、constを使用してすべてのブロック単位をスキャンすることができる.
次に,位相走査の決定時間に基づいて,走査を動的走査と静的走査に分けた.
動的スキャン:関数がどこで呼び出されるかに基づいて、親スキャンを動的に決定します.プログラムの実行時に、実行コンテキストまたは呼び出しコンテキストによってスキャンが決定されます.
関数の定義時に=>静的スキャンを決定します(==ディレクトリスキャン)
javascriptはディレクトリスキャンに従うため、関数が生まれると位相スキャンが決定され、関数が対応する関数オブジェクトを作成すると、そのオブジェクトは常に親スキャンを知っています.これは、JavaScriptでは、関数が内部スロットに親スキャンの参照を格納するため、関数が親スキャンを常に知っている理由です.
関数=>実行コンテキストの作成を呼び出し、PUSH=>ディレクトリ環境の作成=>コードの作成が完了した後、実行コンテキストから削除します.
Lexical Environment:どこで実行されるコードと周囲のコード(含まれる識別子、識別子にバインドされた値、データ構造)を含む
[10分TECOTALK]🍧 EllaのScope&Clotch