13分光鏡
12597 ワード
スキャン
Lexical Environment(語彙環境):コードがどこで実行されているか、周囲にどのようなコードがあるかを判断します.
コードコンテキスト(context):ディレクトリ環境
実行コンテキスト(execution context):実装文
function foo() {
var x = 1;
var x = 2;
console.log(x); //2
}
function bar() {
let y = 1;
// let이나 const 키워드로 선언된 변수는 같은 스코프에서 중복 선언을 허용하지 않음
let y = 2; // SyntaxError
}
bar();
1.顕微鏡の種類
グローバルおよびグローバルスキャン
-コードの一番外側の領域
-スキャン:グローバルスキャン
-変数:グローバル変数
グローバル変数
ゾーンとゾーンスキャン
-関数内
-スキャン:ゾーンスキャン
-変数:領域変数
領域変数は、その領域とサブ領域の範囲内で有効である
// 전역 스코프
var x = 'global x';
var y = 'global y';
function outer() {
// 지역 스코프
var z = 'outer local z';
console.log(x); // global x
console.log(y); // global y
console.log(z); // outer local z
function inner() {
// 지역 스코프
var x = 'inner local x';
console.log(x); // inner local x
console.log(y); // global y
console.log(z); // outer local z
}
inner();
}
outer();
console.log(x); // global x;
console.log(z); // ReferenceError : z is not defined
2.スコフ鎖
->ネスト関数を持つ階層
スキャンチェーンサーチ関数
function foo() {
console.log('global function foo');
}
function bar() {
function foo() {
console.log('local function foo');
}
foo(); // local function foo
}
bar();
かんすうレベルそうさ
ブロックレベルスキャン(block level scope):関数ボディだけでなく、すべてのコードブロック(if、for、while、try/catch)
関数レベルスキャン(function level scope):varキーワードとして宣言された変数は、関数のコードブロック(ボディ)のみをドメインスキャンとして承認します.
// ex1)
var x = 1;
if (true) {
// var로 선언된 변수는 함수의 코드 블록만을 지역 스코프로 인정
// 함수 밖에서 var 키워드로 선언된 변수는 코드 블록 내에서 선언되었어도 모두 전역 변수임
// 의도치 않게 변수 값이 변경되는 부작용 발생
var x = 10;
}
console.log(x); // 10
// ex2)
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 x = 1;
function foo() {
var x = 10;
bar();
}
function bar() {
console.log(x);
}
foo(); // 1
bar(); // 1
📖 参考図書:モダンJavaScript Deep Dive JavaScriptの基本概念と動作原理Reference
この問題について(13分光鏡), 我々は、より多くの情報をここで見つけました https://velog.io/@dev_jazziron/13テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol