Execution Context
실행 컨텍스트는 C언어의 콜스택의 실행정보 하나와 비슷한 개념이다. 실행 컨텍스트는 실행 가능한 자바스크립트 코드 블록이 실행되는 환경이다. 또한 실행 컨텍스트의 생성과 관련해서 현재 실행되는 컨텍스트에서 이 컨텍스트와 관련 없는 실행 코드가 실행되면 새로운 컨텍스트가 생성되어 스택에 들어가고 제어권이 그 컨텍스트로 이동한다.
실행 컨텍스트 생성 과정
1. 활성 객체 생성
해당 컨텍스트 내에서 실행에 필요한 여러가지 정보를 담을 객체를 생성한다. 이 객체에 매개변수나 변수, 객체를 저장하게 된다. 엔진 내부에서 접근이 가능하다.
2. arguments 객체 생성
arguments객체를 생성하며 만들어진 활성 객체에서 arguments 프로퍼티로 지금 생성되는 arguments 객체를 참조한다.
3. 스코프 정보 생성
현재 컨텍스트의 유효 범위를 나타내는 스코프 정보를 생성한다. 현재 컨텍스트에서 특정 변수에 접근해야할 경우 이 스코프를 활용한다. 또한 이를 통해 상위 실행 컨텍스트의 변수도 접근이 가능하다.
4. 변수 생성
현재 실행 컨텍스트 내부에서 사용되는 지역 변수의 생성이 이루어진다. 이 변수는 변수 객체(활성 객체)에 담기게 된다. 변수 객체 안에서 호출된 함수 인자는 각각 프로퍼티가 만들어지고 그 값이 할당된다. 값이 넘겨지지 않은 프로퍼티엔 undefinded가 할당된다. 이 시점에선 메모리에 생성만 진행한다. 초기화는 각 변수나 함수에 해당하는 표현식이 실행될 때 이루어진다.
5. this 바인딩
this가 바인딩 된다.
6. 코드 실행
표현식의 실행이 이루어지는 시점이다. 변수의 초기화 및 연산, 다른 함수의 실행 등이 이루어진다.