스코프란?
- 스코프는 식별자가 유효한 범위를 말한다.
- 이름이 동일한 식별자이지만 스코프가 다른 별개의 변수
var x = 'global';
function foo() {
var x = 'local';
console.log(x);
}
foo();
console.log(x)
var vs let, const
- var : 같은 스코프 내에서 중복 선언 허용
- let, const : 같은 스코프 내에서 중복 선언 허용 안함.
스코프 종류
스코프 체인
- 변수를 참조하는 코드의 스코프에서 시작하여 상위 스코프 방향으로 이동하며 선언된 변수를 검색한다.
함수 레벨 스코프
- 블록 레벨 스코프(ES6 let, const) : 모든 코드 블록(if, for, while, try/catch 등) 지역 스코프
- 함수 레벨 스코프(var) : 오로지 함수의 코드 블록(함수 몸체)만을 지역 스코프
렉시컬 스코프(정적 스코프)
- 렉시컬 스코프(정적 스코프) : 함수를 어디서 정의하는지에 따라 함수의 상위 스코프 결정
- 동적 스코프 : 함수를 어디서 호출하는지에 따라 함수의 상위 스코프 결정
- 자바스크립트를 비롯한 대부분의 프로그래밍 언어는 렉시컬 스코프를 따른다.
출처 : 모던 자바스크립트 Deep Dive(P.189 ~ P.198)
저자 : 이웅모 지음, 위키북스