인사이드 자바스크립트를 공부하며 정리하는 포스팅입니다.



실행 컨텍스트


ECMAScript에서는 실행 컨텍스트를 "실행 가능한 코드를 형상화하고 구분하는 추상적인 개념"이라고 기술합니다.

이 컨텍스트 안에 실행에 필요한 여러 가지 정보를 담고 있습니다. 


실행 컨텍스트가 생성되는 경우는 세 가지가 있습니다.

1) 전역 코드

2) eval() 함수로 실행되는 코드

3) 함수 안의 코드를 실행할 경우


대부분 함수로 실행 컨텍스트를 만듭니다.

ECMAScript에서는 또 실행 컨텍스트 생성을 다음처럼 설명합니다.

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


전역 실행 컨텍스트는 일반적인 실행 컨텍스트와 다릅니다. arguments 객체가 없으며 전역 객체 하나만을 포함하는 스코프 체인이 있습니다.


약간 차이점이 있지만 C++에서 콜스택과 비슷한 개념이라고 보시면 쉬울 것 같습니다.


실행 컨텍스트가 생성되면 자바스크립트 엔진을 활성 객체를 생성합니다. 이 객체에 앞으로 사용하게 될 매개변수나 사용자가 정의한 변수 및 객체를 저장하고, 새로 만들어진 컨텍스트로 접근 가능하게 되어 있습니다.


활성 객체


실행 컨텍스트가 생성되면 자바스크립트에서는 해당 컨텍스트에서 실행에 필요한 여러가지 정보를 담을 객체를 생성합니다. 그게 바로 활성 객체입니다. 사용자가 접근할 수 있는 영역은 아니고 자바스크립트 엔진이 사용하는 영역입니다.


활성 객체가 지닌 정보

1) argumens 객체

인자로 들어온 arguments 객체를 arguments 프로퍼티로 접근합니다.


2) 스코프 정보// 스코프 체인 scope 프로퍼티

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


3) 변수

변수나 내부함수는 활성 객체가 생성되는 시점에 생성은 되지만 초기화는 해당 표현식이 실행될 때 이루어집니다.


4) this