13.1 스코프란?
모든 식별자는 자신이 선언된 위치에 따라 참조할 수 있는 범위가 결정됩니다.
코드가 어디서 실행되며, 주변에 어떤 코드가 있는지를 렉시컬 환경이라고합니다.
var는 같은 스코프내에 중복 선언이 가능해 오류를 발생시킬 수 있다.
13.2 스코프의 종류
13.2.1 전역과 전역 스코프
코드의 가장 바깥은영을 일컫으며, 전역 변수는 어디서든지 참조할 수 있다.
13.2.2 지역과 지역 스코프
지역이란 함수 몸체 내부로 자신의 지역과 하위 지역에서 유효하다.
13.3 스코프 체인
함수가 중첩되며, 스코프는 계정층 구조를 가진다. 이렇게 계층적으로 연결되는 것을 스코프 체인이라고 한다. 이는 변수를 참조할 때 스코프 체인을 통해 상위로 색해나감을 의미한다.
13.3.1 스코프 체인에 의한 변수 검색
상위 스코프에서 유효한 변수는 하위 스코프에서 참조할 수 있지만, 하위 스코프에서 유효한 변수를 상위에선 참조할 수 없다.
13.3.2 스코프 체인에 의한 함수 검색
함수도 변수와 똑같이 동작하는데, 따라서 스코프를 따라 올라가며 탐색하는 것을 식별자를 검색하는 규칙이라고 부르는 편이 더 적합하다.
13.4 함수 레벨 스코프
코드 블록을 만들어내어 지역 스코프를 생성하는 것을 블록레벨 스코프라고한다. 하지만 var는 함수만을 지역 스코프로 인정하는데 이를 함수 레벨 스코프라고 한다. 즉 나머지 블럭에선 선언을 다시 해줘도 외부의 스코프가 그대로 유지된다.
var x = 1;
if(true){
// var 키워드로 선언된 변수는 함수의 코드 블록만을 지역 스코프로 인정한다.
// 함수 내에서 선언되었어도 외부에서 선언하면 전역변수다.
var x = 10;
}
console.log(x) // 10
JavaScript
복사
13.5 렉시컬 스코프
var x = 1;
function foo(){
var x = 10; bar();
};
function bar(){
console.log(x)
};
foo(); // 1
JavaScript
복사
함수를 호출한 곳이아닌 정의한 곳에 따라 값이 달라지는 것을 렉시컬 스코프(정적 스코프)라고 부른다. 렉시컬 스코프는 정의한 곳에 따라 상위 스코프가 정해지며, 어디서 호출하든 상위 스코프는 영향을 받지 않는다.