Web/자바스크립트

실행 컨텍스트

100win10 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"가 된다.












* 송형주, 고현준님의 인사이드 자바스크립트를 보고 원활한 공부를 위하여 요약해보았다.