변수에는 유효 범위가 있다.
변수와 같은 식별자에 대한 유효 범위를 스코프라고 한다.
이런 유효범위는 전역 공간과 지역 공간으로 나뉘며, 이에 따라 변수도 전역 변수와 지역 변수로 나뉜다.
전역 변수
말 그대로 스크립트 영역 어디에도 힘을 발휘할 수 있는 변수이다.
변수가 어떤 블록에도 들어가있지 않을 경우 전역변수이다.
지역 변수
정해진 영역에서만 힘을 발휘하는 변수이다.
보통 블록{} 안이나, 함수 안에서만 변수에 접근할 수 있다.
식별자의 유효 범위, 즉, scope를 안에서부터 밖으로 검색해 나가는 것을 scope chain이라고 한다.
특정 변수나 함수를 사용하려고 할 때,
먼저 자신이 속한 중괄호 안에서 해당하는 변수가 있는지 찾고, 없으면 바깥쪽의 가장 가까운 중괄호 안에서부터 찾는다.
var a =1; //전역공간 변수
var outer = function () {
var inner = function () {
console.log(a) ---------> //undefinde
var a =3 //지역변수
}
inner()
console.log(a) ----------> //결과 1
}
outer()
console.log(a) -----------> //결과 1
컨텍스트는 해당 코드의 외부 환경 정보를 수집해올 때 scope chain이 발생한다.
바로 위 식별자의 Environment를 참조해오기 때문에 위 예제에서 a가 1이 된다.
1. 먼저 outer가 외부 환경의 정보를 수집하는 과정에서 전역 공간의 변수 a를 수집해온다.
2. 다음으로 inner는 outer의 Environment를 참조해서 외부환경의 정보를 수집해온다.
그렇게 전역 공간의 a를 가져오게 되는 것이다.
이렇게 바로 위 식별자의 Environment를 참조하는 것이 scope chain이다.