실행 컨텍스트 찾아보기에 앞서 실행 컨텍스트를 한국말로 번역을 해보자면 실행문맥이라는 말이된다. 컴퓨터에서 컨텍스트란 하나의 작업이라고 정의 할 수 있다.
js에서 말하는 실행 컨텍스트란 무엇일까?
코어 자바스크립트 책에서 실행컨텍스트란 다음과 같이 이야기하고있다.
실행 컨텍스트란 실행할 코드에 제공할 환경 정보들을 모아놓은 객체로서, 동일한 스코프에 있는 코드들을 실행할 때 필요한 환경 정보를 모아 컨텍스트를 구성하고, 이를 호출 스택(콜 스택)에 쌓아서 실행 순서를 보장합니다.
실행 컨텍스트가 구성되는 요소는 다음과 같이 구성됩니다.
그렇다면 실행 컨텍스트의 종류는 무엇이 있을까요?
실행 컨텍스트는 다음과 같이 2가지 종류로 나뉘어집니다.
전역 컨텍스트: 특정 함수가 실행되지 않는 한 전역 컨텍스트에서 실행됩니다.
여기서 변수 객체를 생성하는 대신 this를 전역 객체(global object)를 활용한다.
함수 컨텍스트: 함수가 실행될 때마다 실행 컨텍스트가 생성되고, 함수가 동작을 다하면 콜스택에서 삭제된다.
// --------------- (1)
var a = 1;
function outer() {
function inner() {
console.log('inner function:: ', a);
var a = 3;
}
inner(); // --------------- (2)
console.log('outer function:: ',a);
}
outer(); // --------------- (3)
console.log('outer::', a);
가장 먼저 자바스크립트 파일이 열리는 순간 전역 컨텍스트가 활성화됩니다. 따라서 전역 컨텍스트가 콜 스택에 쌓입니다. 그리고 outer 함수가 호출되면 자바스크립트 엔진은 outer에 대한 환경 정보를 수집해서 outer 실행 컨텍스트를 생성한 후 콜스택에 담습니다. 전역 컨텍스트와 관련된 코드의 실행을 중단하고 outer 실행 컨텍스트와 관련된 코드를 순차적으로 실행합니다. 다시 inner 함수의 실행 컨텍스트가 콜 스택의 가장 위에 담기면 outer 컨텍스트는 중단하고 inner 함수 내부 코드를 진행합니다. 실행이 종료되면 콜 스택에서 제거되고 그 다음 순서에 있는 코드를 이어서 진행합니다.
잘보고 갑니다! 감사합니다!