スキャンチェーン


スキャン


コンセプト


変数の影響範囲


scope自体がグローバル変数と領域変数を区別する役割を果たす


gvが影響力を発揮できる範囲はすべての分野である。


領域に影響力を発揮できる範囲自体をscope,すべての領域に影響力を発揮できるscopeを全逆scopeと呼ぶ.

// 전역 스코프

var gv = "전역변수";

function func() {
	console.log(gv);
}

func();

console.log(gv);

ゾーンスキャンは関数でのみ機能します


lv変数が影響を及ぼす範囲は関数内部である.

function func() {
	var lv = "지역변수"
	console.log(lv);
}

func();

console.log(lv);

関数は互いに近づけない


bという関数に対して別の関数aを呼び出し、a中の変数appleをコンソールで渡す

function a() {
	var apple = "사과";
}

function b() {
	a();
 	console.log(apple);
}

b();

誤った考え:aという関数を呼び出すと、中加号内の文法が実行され、varapple=「アップル」になります。コードはa()である。入ったので、コンソールでアップルを出力するのが普通ではないでしょうか。


関数呼び出しにはまったく関係ありません


Appleという変数が影響を及ぼす範囲は関数呼び出しとは関係なく,その関数だけである.



その他の説明


黒い家と青い家が存在します。


黒い家にりんごを入れる



関数呼び出しに関係のない関数作成フェーズでは、青色セットと黒セットは2つの独立したセットです。


つまり、黒い家を青い家に呼ぶのは、黒い家の中のものが青い家に入るわけではない。


互いに独立した地域であるため、互いに影響力を発揮することはできない。


ひょうじチェーン


説明:


関数に関数を作成し、コンソールでa+b+c値を出力すると、何が出力されますか?出力60


このように出力される原因は,スキャンチェーンに関係する


出力60はa,b,cのすべての変数に近いことを意味する

var a  = 10;

function func1() {

	var b = 20;

	function func2 () {

		var c = 30;

		console.log(a + b + c);
	}

	func2();
}

func1();

まずfunc 1呼び出し時に中フック構文を実行する


func 2を呼び出して、以前に作成したfunc 2関数のフック構文を実行します。


内側から外側へ移動


aナビゲーションfunc 2にない->外部func 1にない->グローバル変数が存在するかどうかを計算する->存在する(10個の割当て)


bナビゲーションfunc 2にない->外部func 1にbが存在する(20個割り当てる)


cナビゲーションfunc 2に存在する(30個割り当て)


今のように中から外まで探求するのは、それ自体がスコフチェーンです。



その他の説明


a変数はグローバル変数-グローバルスキャン(すべての領域に影響[緑])


func 1-ゾーンスキャン(青のみ表示)


func 2-ゾーンスキャン(赤の範囲でのみ表示)


画像を見ると、スキャンラインごとに重なります。


中から外へ探求する構造はスキャンチェーンと呼ばれています



外部でcを検索すると、外部から内部を検索し、定義されていないことを示すエラー文が出力されます。


すなわち,内向的外探索は許されるが,外から外へ探索することはできない.


オーバーラップスキャンは、スキャンバブルとも呼ばれる(同じ概念)

var a  = 10;

function func1() {

	var b = 20;

	function func2 () {

		var c = 30;

		console.log(a + b + c);
	}

	func2();

	console.log(c);
}

func1();

でんしそうさ


関数とは、互いのスペクトルに近づくことができないことを意味します。


nameには何が出力されますか?

var name = "Woosung";

function func1() {
	console.log(name);
}

function func2() {
	name = "Kim";
	func1();
}

func2();

関数func 1のconsoleが呼び出されたのでlog(name); これではありません。


func 2のnameはvarキーワードではなく、結果としてnameというグローバル変数のWoosungの値がKimになります


aと3.14の変化は同じ行為である

var a = 100
a = 3.14

つまりfunc 1のconsoleです。log(name)は、kimとしてインポートされたグローバル変数nameです。


前にvarキーワードを使用している場合はwoosungを出力します


varキーワードを用いることでfunc 2におけるnameが影響を及ぼす範囲はfunc 2における


グローバル変数nameとゾーン変数nameは、同じ名前の異なる変数のみです(変更はありませんので)

var name = "Woosung";

function func1() {
	console.log(name);
}

function func2() {
	var name = "Kim";
	func1();
}

func2();