변수 스코프를 결정하는 단위는 함수이다. 자바스크립트에서는 중첩함수가 가능한데 이러한 함수별로 생성되는 변수 스코프 객체 간에는 부모, 자식 관계가 만들어진다.
var x = 2;
outer();
function outer ()
{
var y = 3;
(function inner()
{
var z = 3;
var a = x;
console.log("a: " + a);
})();
};
파싱단계를 거친후, 위 코드가 실행될 때,
1. inner 함수내부의 a 변수에 변수 x를 할당하는데,
2. 먼저 변수 x를 inner 함수 내부에서 검색한다,
3. 여기서는 inner 함수 내부에 변수 x가 없기때문에 inner 함수를 포함하고 있는 상위 함수인 outer 함수의 변수 스코프에서 변수 x를 검색한다.
4 . outer 함수에도 변수 x가 정의돼 있지 않기때문에 마지막으로 전역 변수 스코프에서 x를 검색하여 x가 존재하기때문에 전역 스코프에 있는 변수 x의 값을 변수 a에 할당한다. 만약 전역 스코프에도 변수 x가 존재하지 않는다면 에러가 발생하게 된다.
파싱단계에서 구성되는 이러한 변수 스코프의 관계를 변수 스코프체인이라고 하며 위 코드의 변수 스코프 체인을 그림으로 표현하면 아래와 같다.