티스토리 뷰
자바스크립트가 가지고 있는 특징중 하나이다. 자바스크립트에서 유효범위는 변수와 매개 변수의 접근성과 생존 기간을 제어하는 범위를 말한다.
스코프 체인을 이해하기 위해서는 먼저 실행 컨텍스트(execution context)와 렉시컬 환경(Lexical Environment)에 대해 먼저 알아야한다.
실행 컨텍스트는 코드가 실행되기 위해 필요한 정보를 가지고 있다. 이 실행 컨텍스트는 실행 가능한 코드가 실행될 때 생성이 된다.
처음에는 전역코드가 먼저 실행이되는데 이때 전역 컨텍스트를 만들고 전역 코드를 순차적으로 평가를 한다. 그러다 함수가 호출문을 만나면 새로운 실행 컨텍스트가 만들어지면서 해당 실행부의 코드를 순차적으로 평가를한다. 이때 스택을 이요해 실행 컨텍스트를 관리하게 되는데. 새로운 실행 컨텍스트가 생성되면 스택에 쌓고 실행 중인 코드가 종료되면 해당 실행 컨텍스트를 스택에서 제거한다.
실행 컨텍스트는 렉시컬 환경을 가지고 있는데, 렉시컬 환경은 환경 레코드(EnvironmentRecord)와 외부 렉시컬 환경(OuterLexicalEnvironment)로 구성이된다. 실행 컨텍스트는 자바스크립트 객체로 표현을 하면 아래와 같다.
1
2
3
4
5
6
7
8
9
10
11
12
|
//실행 콘텍스트
ExecutionContext= {
//렉시컬 환경
LexicalEnvironment : {
//환경 리코드
EnvironmentRecord : {
},
//외부 렉시컬 환경
OuterLexicalEnvironment
}
}
|
cs |
각 실행 컨텍스트는 외부 렉시컬 환경으로 체인처럼 연결되어 있다. 이렇게 각 렉시컬 환경이 연결이 되어있기 때문에 스코프 체인이 형성될 수 가 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
var person = 'james';
function print() {
var person2 = 'john';
function innerprint() {
console.log(person);
console.log(person2);
}
innerprint();
console.log('inner print finished');
}
print();
console.log('print finished');
|
cs |
위 예제에서 10라인 innerprint 함수가 호출될 때 두변수 person과 person2, 즉 각 식벽자는 연결된 값을 자신의 실행 컨텍스트의 렉시컬 환경에서 찾는다. 하지만 person과 person2는 innerprint 함수 내에 선언 되어 있지 않다. 이렇게 자신의 실행 컨텍스트에 없으면 외부 렉시컬 환경을 참조를 통해 연결된 print 실행 컨텍스트에서 해당 식별자를 찾게 된다.
innerprint 외부 렉시컬 환경은 print 렉시컬 환경과 연결 되 어있고 print 외부 렉시컬 환경은 전역 렉시컬 환경과 연결이 되어있다 이것을 scope chain이라고 부른다.
참고 : 함수가 정의 될때 렉시컬 환경을 기억하는 함수를 클로저라고 한다.
'Javascript' 카테고리의 다른 글
모듈 이해하기 (0) | 2019.07.18 |
---|---|
Get, Set을 통한 속성 접근 관리하기 (0) | 2019.07.17 |
객체 속성 기술자 이해하기 (0) | 2019.07.17 |
함수 나머지 매개변수 이해하기 (0) | 2019.07.17 |
Argument(매개변수)에 대하여 (0) | 2019.07.17 |