실행 가능한 코드를 형상화하고 구분하는 추상적인 개념이라고 정의하면 된다. 쉽게 말하자면 코드들이 실행되기 위한 환경을 제공하는 객체이라고 이해하면 될 것 같다.
(코드가 실행된다면 Execution Context 내부에서 실행되고 있는 것이다.)
다른 의미로는 식별자 결정을 더욱 효율적으로 하기 위한 수단으로써 필요한 정보를 한데 모아 제공하는 객체라고 정리할 수 있다.
JavaScript 엔진에서 코드를 실행하기 위해서는 실행에 필요한 정보를 알고 있어야한다.
ES 스펙에 나오는 정식 명칭은 Environment Record
로, 식별자와 식별자에 바인딩된 값을 기록해두는 객체입니다.
이 환경 레코드에 변수가 어떻게 저장되는지만 봐도 호이스팅
을 쉽게 이해할 수 있습니다.
Outer 의 정식 명칭은 Outer Environment Reference
으로, 외부 환경 참조 입니다.
바깥 Lexical Environment 를 가리키는데, 단순화한 아래의 실행컨텍스트에서 이 두 동그라미를 합쳐서 Lexical Environment 라고 하고, 렉시컬 환경 또는 정적 환경 이라고도 불립니다. → 스코프 체인
이해 개념
Global Context (전역 컨텍스트)
함수 안에서 실행되는 코드가 아니라면 모든 스크립트는 Global Context 에서 실행된다.
스택 구조를 가지는 형태로 Execution Context 가 생성이 된 후 global object로 window가 this로 할당되고 스택에 쌓이게 된다.
Global Context 안에 포함되는 모든 코드들의 실행 가능한 코드들은 순서대로 스택에 쌓이게 되며 LIFO(Last In First Out) 으로 함수를 실행하게 된다.
Function Context (함수 컨텍스트)
Function Context 는 선언된 함수가 호출이 될 때를 기점으로 생성이 되고, 함수의 모든 동작이 종료되면 Function Context 는 소멸된다.
(closure(클로저)의 개념이 바로 스코프에서 나온다.)
각각의 함수들은 각각의 Function Context 를 가지지만 함수가 호출이 되어야만 생성이된다.