실행 컨텍스트
실행 컨텍스트 (execution context)는 실행 가능한 코드를 형상화하고 구분하는 추상적인 개념이라고 정의한다.
실행 컨텍스트는 실행 가능한 코드가 실행되기 위해 필요한 환경이다.
여기서 말하는 실행 가능한 코드란 다음과 같다.
1_)전역코드
->전역 영역에 존재하는 코드
2_)Eval코드
->Eval함수로 실행되는 코드
3_)함수코드
->함수내에 존재하는 코드
자바스크립트 엔진은 코드를 실행하기 위해 실행에 필요한 여러가지 정보를 알고 있어야 한다.
여러가지 정보란 다음과 같은 것들이 있다.
-변수 : 전역변수, 지역변수, 매개변수, 객체의 프로퍼티
-함수 선언
-변수의 유효범위(scope)
-this
이렇게 프로그램 실행에 필요한 여러 정보를 형상화, 구분하기 위해 자바스크립트 엔진은
실행 컨텍스트를 물리적 객체의 형태로 관리한다.

1)JS코드로 control이 이동하면, 빈 실행 컨텍스트 스택이 생성된다.
2)전역 코드 (Global code)로 control이 진입하면 전역 실행 컨텍스트 (Global execution context,Global EC)가 생성되고, 실행 컨텍스트 스택에 쌓인다.
전역 실행 컨텍스트는 웹 페이지에서 나가거나, 브라우저를 닫을때까지 유지된다.
3)함수를 호출하면, 해당 함수의 실행 컨텍스트가 생성되며, 직전에 실행된 실행 컨텍스트 위에 쌓인다.
4)함수 실행이 끝나면, 해당 함수의 실행 컨텍스트를 파기하며, 직전의 실행 컨텍스트에 control을 반환한다.
실행 컨텍스트의 3가지 객체
실행컨텍스트는 실행가능한 코드를 형상화하고, 구분하는 추상적인 개념이지만, 물리적으로 객체의 형태를 가지며, 3가지 프로퍼티를 소유한다.
1_)Variable object
2_)Scope chain
3_)thisValue
-Variable Object(변수 객체)
실행컨텍스트가 생성되면 자바스크립트 엔진은 실행에 필요한 여러 정보들을 담을 객체를 생성한다.
이를 변수객체(Variable object)라고 한다.
변수객체는 코드가 실행될 떄 엔진에 참조되며, 코드에서는 접근할 수 없다.
변수객체는 다음과 같은 정보를 담는다.
-변수
-함수선언
-매개변수와 인수 정보
전역 컨텍스트와 실행 컨텍스트는 객체를 가르키는데, 전역컨텍스트가 가르키는 객체와, 실행 컨텍스트가 가르키는 객체는 서로 다르다.
전역 컨텍스트는 모든 전역 변수, 전역 함수 등을 포함하는 전역 객체(Global Object / GO)를 가리킨다.
전역 객체는 전역에 선언된 전역 함수와 전역 변수를 프로퍼티로 소유한다.
전역 컨텍스트(Global EC)의 변수 객체(Variable object)는 전역 객체 (global object)를 가르킨다.