(1) 스코프(유효범위)란
- 참조 대상 식별자를 찾아내기 위한 규칙이다.
- 전역 스코프와 지역 스코프로 나뉜다.
- 전역 스코프(어디서든지 참조 가능) → 전역 변수(전역에 선언된 변수)
- 지역 스코프(함수 코드 블록, 함수 자신, 하위 함수에서만 참조 가능) → 지역 변수(함수 내에서 선언된 변수)
var a = 'wangi'; // 전역변수
function x() {
var b = 'eddy'; // 지역변수
console.log(a); // 'wangi'
console.log(b); // 'eddy'
}
x();
console.log(a); // 'wangi'
console.log(b); // error b는 지역변수
(2) 상위 스코프를 결정하는 방법
- 동적 스코프와 렉시컬 스코프 두 가지가 있다.
- 동적 스코프(Dynamic Scope)는 함수를 어디서 호출 하였는지에 따라 상위 스코프를 결정한다.
- 렉시컬 스코프(Lexical Scope)는 함수를 어디서 선언 하였는지에 따라 상위 스코프를 결정한다.
- javascript에선 렉시컬 스코프를 따르므로 선언한 시점에 상위 스코프가 결정된다.
var x = 1;
function a() {
var x = 10;
b();
}
function b() { // 상위 스코프는 전역 스코프
console.log(x);
}
a(); // 1
b(); // 1
(3) 암묵적 전역과 비블록 레벨 스코프
- javascript는 블록 레벨 스코프를 사용하지 않는다.
- 비 블록 레벨 스코프는 함수 밖에서 선언된 변수는 코드 블록 내에서 선언되었다 할지라도 전역 스코프를 갖게 된다.
if (true) {
var x = 5;
}
console.log(x); // 5 x는 전역변수
- 암묵적 전역 변수는 선언하지 않은 변수를 전역 변수로 취급하는 것을 말한다. (호이스팅 불가, delete로 삭제 가능)
console.log(x); // undefined 전역변수 x는 호이스팅이 발생한다.
console.log(y); // Error y는 전역변수가 아니라 호이스팅이 발생하지 않는다.
var x = 10; // 전역 변수
function foo () {
y = 20; // 선언하지 않은 식별자
console.log(x + y);
}
foo(); // 30
console.log(x); // 10
console.log(y); // 20
delete x; // 전역변수는 삭제되지 않는다.
delete y; // 프로퍼티는 삭제된다.
console.log(x); // 10
console.log(y); // error
'JavaScript' 카테고리의 다른 글
[JavaScript] this (1) | 2023.10.17 |
---|---|
[JavaScript] Strict mode (0) | 2023.10.16 |
[JavaScript] 프로토타입 (0) | 2023.10.13 |
[JavaScript] 함수 (1) | 2023.10.12 |
[JavaScript] 객체 변경 불가성 (1) | 2023.10.11 |