앞에서 변수의 유효 범위라는 개념에 대한 정의를 내린 바 있는데, 그것은 단지 자바스크립트의 언어적인
구조(lexical structure)에 따른 정의였다. 즉, 전역 변수는 전역적인 유효 범위를 갖고, 함수에서 정의된
변수는 지역적인 유효 범위를 갖는다는 것이다. 만일 어떤 함수의 정의가 다른 함수 내부에 중첩되어 있을
경우, 이 중첩된 함수에서 정의된 변수 역시 중첩된 유효 범위를 갖는다. 그런데 앞서 살펴본 바에 따르면,
전역 변수는 전역 객체의 프로퍼티이며 지역 변수는 특수한 호출 객체의 프로퍼티이다.
이제 변수의 유효 범위 이야기로 돌아와서 그 개념을 다시 세워보자.
여기서 새롭게 기술하는 변수의 유효 범위를 이해하면, 다양한 측면에서 변수라는 것을 생각하고
자바스크립트의 작동 방식을 깊이 이해할 수 있을 것이다.
모든 자바스크립트 실행 컨텍스트에는 유효 범위 체인(scope chain)이라는 것이 딸려 있다.
이 유효 범위 체인이란 객체들의 나열(또는 체인)이다. 자바스크립트코드에서 x라는 변수의 값을 찾으려면 (이는 '변수 이름 판별'이라 불리는 과정이다) 제일 먼저 체인의 첫 번째 객체부터 검색을 시작한다.
만일 이 객체에 x라는 이름의 프로퍼티가 있을 경우, 해당 프로퍼티의 값이 쓰이게 된다.
만일 첫 번째 객체에 x라는 이름의 프로퍼티가 없을 경우 다음의 객체로 검색이 계속 된다.
두 번째 객체에도 x라는 이름의 프로퍼티가 없을 경우 그 다음 객체로 검색을 계속하는 이러한 작업이
계속된다.
최상위 자바스크립트 코드의 경우 (즉, 어떠한 함수 정의에도 포함되지 않은 코드) 이 유효 범위 체인은
'전역 객체' 단 하나의 객체만으로 이루어진다. 이 객체에서 모든 변수를 검색한다.
이 객체에 존재하지 않는 변수의 값은 undefined이다. 그러나 (중첩되지 않은) 함수의 경우,
요휴 범위 체인은 두 개의 객체로 이루어진다. 첫 번째는 이 함수의 호출 객체이고, 두 번째는 전역 객체다.
이 함수에서 어떤 변수를 참조할 경우, 호출 객체(지역 유효 범위)를 먼저 확인한 다음, 전역 객체 (전역 유효 범위)를 확인하게 된다. 중첩된 함수의 경우 세 개 또는 그 이상의 객체가 유효 범위 체인에 존재한다.
함수에서 어떤 과정으로 변수 이름을 검색하는 그림 4-1에서 살펴보자.
그림 4-1 유효 범위 체인과 변수 판별
'IT_Programming > JavaScript' 카테고리의 다른 글
자바스크립트 완벽가이드 - 5.2 연산자 개요 (0) | 2010.07.04 |
---|---|
자바스크립트 완벽가이드 - 5.1 표현식 (0) | 2010.07.04 |
자바스크립트 완벽가이드 - 4.6 변수와 프로퍼티 (0) | 2010.07.04 |
자바스크립트 완벽가이드 - 4.5 가비지 컬렉션 (0) | 2010.07.04 |
자바스크립트 완벽가이드 - 4.4 기본 타입과 참조 타입 (0) | 2010.07.04 |