스코프란?
스코프(scope, 유효범위) : 모든 식별자는 자신이 선언된 위치에 의해 다른 코드가 식별자 자신을 참조할 수 있는 유효 범위가 결정됨, 즉 식별자가 유효한 범위
var x = 'global'
function foo() {
var x = 'local'
console.log(x); // -> x 변수 참조
}
foo();
console.log(x); // -> x 변수 참조
- 식별자 결정 : 어떤 변수 참조할 지 결정하는 것
스코프는 자바스크립트 엔진이 식별자를 검색할 때 사용하는 규칙
스코프의 종류
코드는 전역(global)과 지역(local)으로 구분
구분 | 설명 | 스코프 | 변수 |
---|
전역 | 코드의 가장 바깥영역 | 전역 스코프 | 전역 변수 |
지역 | 함수 몸체 내부 | 지역 스코프 | 지역 변수 |
스코프 체인
- 스코프 체인 : 스코츠가 계층적으로 연결 된 것
- 검색 : 변수를 참조할 때 자바스크립트 엔진은 스코프 체인을 통해 변수를 참조하는 코드의 스코프에서 시작하여 상위 스코프 방향으로 이동하며 선언된 변수
함수 레벨 스코프
- 블록 레벨 스코프 : 모든 코드 블록이지역 스코프를 만든다
- 함수 레벨 스코프 : var 키워드로 선언된 변수는 오로지 함수의 코드 블록(함수 몸체)만을 지역 스코프로 인정하는 것
렉시컬 스코프
- 자바스크립트는 렉시컬 스코프를 따름
- 함수를 어디서 정의했는지에 따라 상위 스코프를 결정
- 함수의 상위 스코프는 언제나 자신이 정의된 스코프