변수에는 유효 범위가 있다.
변수와 같은 식별자에 대한 유효 범위를 스코프라고 한다.
이런 유효범위는 전역 공간과 지역 공간으로 나뉘며, 이에 따라 변수도 전역 변수와 지역 변수로 나뉜다.
전역 변수
말 그대로 스크립트 영역 어디에도 힘을 발휘할 수 있는 변수이다.
변수가 어떤 블록에도 들어가있지 않을 경우 전역변수이다.
지역 변수
정해진 영역에서만 힘을 발휘하는 변수이다.
보통 블록{} 안이나, 함수 안에서만 변수에 접근할 수 있다.
식별자의 유효 범위, 즉, 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이다.