-
실행 컨텍스트Web/자바스크립트 2019. 8. 5. 00:26
1. 실행 컨텍스트의 개념
C 에서의 콜 스택의 호출 과정을 기억해보자.
실행 컨텍스트는 콜 스택에 들어가는 실행 정보 하나와 비슷하다. " 실행 가능한 자바스크립트 코드 블록이 실행되는 환경 " 이라고 말할 수 있다.
여기서의 코드 블록은 대부분의 경우 함수다. 함수로 실행 컨텍스트를 만드는데 이 코드 블록안에 변수, 객체, 실행가능한 코드가 들어있다.
코드가 실행되면 실행 컨텍스트가 생성, 실행 컨텍스트는 스택 안에 하나씩 쌓이고, 제일 위 실행 컨텍스트가 현재 실행되는 컨텍스트 이다.
console.log("1");
function ex1() {
console.log("2");
};
function ex2() {
ex1();
console.log("3");
};
ex2();
// 출력 결과
1
2
3
실행 컨텍스트 생성 과정
그 전에
- 활성 객체와 변수 객체
- 스코프 체인 부터 알아보기
1. 실행 컨텍스트 생성시 자바스크립트 엔진은 해당 컨텍스트에서 실행에 필요한 여러 정보를 담을 객체를 생성 = > 활성 객체 생성
새로 만들어진 컨텍스트로 접근 가능하게 되어 있다. 엔진 내부에서 접근 가능 하다는 것.
2. arguments 객체 생성
3. 스코프 정보 생성 : 현재 컨텍스트의 유효 범위를 나타내는 스코프 정보를 생성한다. 이 스코프 정보는 현재 실행 중인 실행 컨텍스트 안에서
연결리스트와 유사한 형식으로 만들어진다. 이 리스트를 스코프 체인이라고 하며 [[scope]] 프로퍼티로 참조된다.
4. 변수 생성
앞서 생성된 활성 객체가 변수 객체로 사용된다. 변수 객체 안에서 호출된 함수 인자는 각각의 프로퍼티가 만들어지고 그 값이 할당된다.
(값이 넘겨지지 않았다면 undefined 할당)
5. this 바인딩
this 키워드를 사용하는 값 할당. 참조 객체 없을시 전역 객체 참조
6. 코드 실행
스코프 체인은 어떻게 만들어 질까?
자바스크립트도 다른 언어와 마찬가지로 스코프, 즉 유효 범위가있다. 이 유효 범위 안에서 변수와 함수가 존재한다.
자바스크립트에서는 함수 내의 {,} , for() {}, if {} 같은 구문은 C와 달리 유효 범위가 없다. 오직 함수만이 유효 범위의 한 단위가 된다.
이 휴보 범위를 나타내는 스코프가 [[scope]] 프로퍼티로 각 함수 객체 내 연결리스트 형식으로 관리 되는 것. 이를 스코프 체인 이라 한다
.
스코프 체인 정리
- 각 함수 객체는 [[scope]] 프로퍼티로 현재 컨텍스트의 스코프 체인을 참조
- 현재 실행되는 함수 객체의 [[scope]] 프로퍼티를 복사하고, 새롭게 생성된 변수 객체를 해당 체인의 제일 앞에 추가
- 스코프 체인 = 현재 실행 컨텍스트의 변수 객체 + 상위 컨텍스트의 스코프 체인
예제 )
Value 변수를 printFunc 변수 객체에서 찾으므로, 결과값은 "value2"가 된다.
* 송형주, 고현준님의 인사이드 자바스크립트를 보고 원활한 공부를 위하여 요약해보았다.
'Web > 자바스크립트' 카테고리의 다른 글
함수와 프로토타입 체이닝 (0) 2019.07.23 자바스크립트 데이터 타입, 연산자 정리 (0) 2019.07.17