スキャンチェーン
4345 ワード
スキャン
コンセプト
変数の影響範囲
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();
Reference
この問題について(スキャンチェーン), 我々は、より多くの情報をここで見つけました https://velog.io/@woosungkim0123/스코프テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol