[Java Script] 실행 컨텍스트

2021. 8. 5. 17:02CSE/Java Script

1. 실행 컨텍스트 개념

- 콜 스택(call stack) : 함수를 호출할 때 해당 함수의 호출 정보가 차곡차곡 쌓여있는 스택

- 실행 컨텍스트는 콜 스택에 들어가는 실행 정보 하나와 비슷하다.

- 실행 컨텍스트가 형성되는 세 가지 경우

  • 전역 코드
  • eval() 함수로 실행되는 코드
  • 함수 안의 코드를 실행할 경우

- ECMAScript에서 말하는 실행 컨텍스트 생성

=> 현재 실행되는 컨텍스트에서 이 컨텍스트와 관련 없는 실행 코드가 실행되면, 새로운 컨텍스트가 생성되어 스택에 들어가고 제어권이 그 컨텍스트로 이동한다.

 

console.log("This is gloabl context");

function ExContent1(){
    console.log("This is ExContent1");
};

function ExContent2(){
    ExContent1();
    console.log("This is ExContent2");
};

ExContent2();
//This is global context
//This is ExContent1
//This is ExContent2

- 전역 컨텍스트 -> ExContext2 호출 -> ExContext1 호출 -> ExContext1 반환 -> ExContext2 반환 -> 전역 컨텍스트 실행 완료

 

2. 실행 컨텍스트 생성 과정

(1) 활성 객체 생성

- 실행 컨텍스트가 생성되면 자바스크립트 엔진은 해당 컨텍스트에서 실행에 필요한 여러 가지 정보를 담을 객체를 생성한다

=> 활성 객체를 생성하는 것

- 활성 객체에는 앞으로 사용하게 될 매개변수나 변수 및 객체를 저장하게 된다.

 

(2) arguments 객체 생성

- 함수 입력 인자가 들어있는 arguments 객체를 생성한다.

 

(3) 스코프 정보 생성

- 현재 컨텍스트의 유효 범위를 나타내는 스코프 정보를 생성한다.

- 스코프 정보는 연결 리스트와 유사한 형식으로 만들어진다. => 스코프 체인

- 스코프 체인으로 현재 컨텍스트의 변수와 상위 실행 컨텍스트의 변수에 접근 할 수 있는 것이다.

- 현재 생성된 활성 객체가 스코프 체인의 제일 앞에 추가된다.

 

(4) 변수 생성

- 변수 객체 (== 활성 객체) : 생성되는 변수를 저장한다.

- 함수 인자는 각각의 프로퍼티가 만들어지고 값이 할당된다.

- 생성된 변수와 내부 함수는 메모리에 생성되기만 하고 초기화는 각 변수나 함수에 해당하는 표현식이 실행되기 전 까지 초기화되지 않는다.

 

(5) this 바인딩

- this 키워드를 사용하는 값이 할당된다.

=> 여기에 this가 참조하는 객체가 없으면 this는 전역 객체를 참조하게 된다.

 

(6) 코드 실행

- 코드가 실행되면서 변수나 함수 등의 초기화가 진행된다.

 

** 전역 실행 컨텍스트는 arguments 객체가 없고, 전역 객체 하나만을 포함하는 스코프 체인이 있다.