📌 "실행 컨텍스트(Execution Context)란 무엇인가요?"
실행 컨텍스트(Execution Context )는 실행 가능한 코드를 형상화하여 구분할 수 있게하는 추상적인 개념이다.
JavaScript 에서 실행 가능한 코드의 종류는 아래와 같다.
eval()
로 실행되는 코드eval()
은 코드를 그냥 실행하기 때문에 보안상에 취약하다.이러한 코드들을 실행하기 위해 JavaScript 엔진은 변수, 함수 선언, 변수의 유효 범위, this
에 대한 정보를 알아야한다.
이러한 정보들을 물리적 객체의 형태로 나타낸 것을 실행 컨택스트라 한다.
전역 컨텍스트(Global Context )
window
가 this
로 할당되고 스택에 쌓인다.함수 컨텍스트(Function Context)
eval 함수 컨텍스트(Function Context)
eval()
를 위한 실행 컨텍스트로서💡 이런 실행 컨텍스트들은 JavaScript 엔진의 call stack에 저장된다.
실행 컨텍스트 안에는 3가지 객체가 존재한다.
변수 객체(Variable Object )
Scope Chain
undefined
를 반환한다.thisValue
this
값이 할당됨this
의 값이 결정되기 전 this
은 전역 객체를 가리키고 있음call
, apply
, bind
), Construction, MethodInvocation 패턴에 의해 결정된다.window
등) 혹은 활성화 객체가 해당된다.💡 전역 컨텍스트는 변수 객체 를 가진다
- 전역 컨텍스트는 인수가 없기 때문에 활성 객체 가 필요하지 않다.
- 활성 객체 가 없으므로 대신 전역 객체 가 변수 객체 로 사용된다.
예제를 통해 컨텍스트의 생성과정을 말하면 아래와 같다.
var global = 1;
function test() {
var a = 1;
function inner() {
var b = 1;
console.log(a + b + golbal);
}
inner();
}
var obj = test();
위와 같은 코드를 실행시키면 초기에는 전역 컨텍스트가 생성되면서 한 줄씩 코드를 실행한다.
함수가 호출되는 경우 함수 컨텍스트가 생성된다.
이렇게 생성된 함수 컨텍스트들은 call stack에 쌓인다.
전역 컨텍스트 생성 및 함수호출 마다 컨텍스트들이 call stack에 쌓이면서 아래를 진행한다.
컨텍스트에 활성 객체(변수 객체) 생성
활성 객체(변수 객체)에 파라미터, 변수, 객체 정보를 저장
활성 객체(변수 객체) 내에 Scope Chain을 생성 ([[Scope]]
프로퍼티를 가지게 된다.)
활성 객체(변수 객체) 가 생성 및 변수 및 프로퍼티를 생성
undefined
로 할당됨)this
에 대한 정보를 저장하고 객체에 바인딩
call
, apply
, bind
), Construction, MethodInvocation 패턴에 의해 결정된다.코드 실행