티스토리 뷰

728x90
반응형

유효범위 체인 - 자바스크립트 완벽 가이드 발췌


자바스크립트는 언어적으로 유효범위를 가지고 있는 언어다.

변수의 유효범위란 변수가 정의된 소스코드의 집합으로 생각할 수 있다.

전역변수는 프로그램 전체에 걸쳐 정의된다.

지역변수는 변수가 선언된 함수 내에서 전체에 걸쳐 정의되고 또한 중첩 함수내에서도 정의된다.


우리가 지역변수를 잘 정의된 객체의 프로퍼티로 생각한다면, 변수 유효범위를 다른 관점으로 볼 수도 있다.

자바스크립트의 모든 청크(전역 코드 또는 함수)는 그것과 연관된 유효범위 체인을 가지고 있다.

이 유효범위 체인은 "유효 범위 안에서" 변수를 정의하는 객체의 목록 또는 체인이다.

자바스크립트가 변수x의 값을 얻어야 할때(변수 해석이라 일컫는 과정) 처음 체인에 있는 객체에서 x를 찾기 시작한다.

만약 이 객체가 이름이 x인 프로퍼티를 가지고 있다면, 그대로 사용한다.

만약 이 객체가 이름이 x인 프로퍼티를 가지고 있지 않다면 자바스크립트는 체인에 있는 다음 객체에서 x프로터티를 찾는다.

두번째 객체가 x프로퍼티를 가지고 있지 않다면 또 다음 객체에서 찾는다.

x가 유효범위 체인 안에 있는 객체의 프로퍼티가 아니라면 x는 유효범위 안에 없기 때문에 ReferenceError가 발생한다.


최상위 자바스크립트 코드의 경우(즉, 함수 정의를 제외한 코드)이 유효범위 체인은 단 하나의 "전역객체"만으로 이루어진다.

일반적으로 중첩되지 않는 한 함수의 경우, 유효범위 체인은 두개의 객체로 이루어진다.

하나는 함수 매개변수와 지역변수를 정의한 객체고, 다른 하나는 전역객체다.

중첩된 함수에서 유효범위 체인은 세 개 이상의 객체를 갖는다.

객체의 유효범위 체인이 어떻게 생성되는지는 반드시 이해해야 한다.

함수가 정의될 때, 함수는 유효 영역 체인을 저장한다.

함수가 호출될 때 함수 몸체에 정의된 지역 변수를 저장하기 위해서 새로운 객체를 하나 생성하고, 해당 함수를 호출한

부모 함수가 가진 유효범위 체인을 기존에 저장된 유효범위 체인에 추가한다.

중첩 함수의 경우에는 외부에서 함수를 호출할 때마다 중첩된 함수가 매번 선언된다.

이러한 이유로 함수를 호출할 때마다 유효범위 체인이 조금씩 달라진다.

물로 중첩된 함수의 코드는 항상 동일하지만, 유효범위 체인과 관련된 코드는 함수를 호출할 때마다 달라지게 된다.

유효범위 체인 개념은 클로저를 이해하는데 굉장히 중요하다.




728x90
반응형

'Programming language > javascript' 카테고리의 다른 글

js 라이브러리 모음  (0) 2013.08.20
threejs examples  (0) 2013.05.29
자바스크립트 많이 쓰는 용어  (0) 2013.02.07
함수2  (0) 2013.02.06
함수1  (0) 2013.02.06
댓글