실행 컨텍스트(Execution Context)
자바스크립트 코드가 실행되는 과정
var x;
x = 1;
이런 자바스크립트 코드가 있다. 이 코드는 자바스크립트 엔진에 의해 컴파일 되는데 이 소스 코드를 두 개의 과정으로 처리한다.
1.소스코드의 평가
실행 컨텍스트를 생성하고 변수,함수 등의 선언문만 먼저 실행 후 스코프에 등록한다.(호이스팅이 발생)
2.소스코드의 실행
평가가 끝나면 코드가 순차적으로 실행되는 런타임이 시작된다. 이때 코드는 실행에 필요한 정보(변수,함수)를 실행컨텍스트가 관리하는
스코프에서 검색한다.
즉, 실행컨텍스트(Execution Context)는 식별자를 등록하고 관리하는 스코프와 실행 순서를 관리하는 자바스크립트 내부 메커니즘이다.
실행 컨텍스트는 렉시컬 환경과 실행 컨텍스트 스택을 통해서 수행된다.
👉🏻렉시컬 환경(lexical environment)
실행 컨텍스트에서 변수들의 이름과 값, 참조되는 위치등을 저장하는데 사용하는 객체, 이 객체는 해당 실행 컨텍스트에서
사용가능한 변수,함수들을 모두 등록하고 스코프 체인을 만드는 역할을 한다.
👉🏻실행 컨텍스트 스택
코드의 실행 순서를 관리해 준다.
코드로 알아보는 실행 컨텍스트
const x = 1;
function foo(){
const y = 2;
function bar(){
const z = 3;
console.log(x+y+z);
}
bar();
}
foo();
위의 코드는 그림과 같은 동작으로 수행된다.
1.전역코드 평가 및 실행
선언문으로 등록된 전역 변수와 전역 함수가 전역 컨텍스트에 담기고 런타임이 시작되면서 x에 1을 등록한다.
2.foo함수코드의 평가 및 실행
foo()가 호출되어 제어권이 foo로 이동한다. 지역변수 y와 bar함수가 등록되며, 렉시컬 환경을 통해 스코프 체인이 형성된다.
코드가 수행되고 y = 2가 등록된다. 그리고 bar 함수가 호출된다.
3.bar함수코드의 평가 및 실행
bar이 호출되어 제어권이 bar로 이동된다. 변수 z와 console.log()를 수행하고 종료된다.
4.foo함수로 복귀
bar이 종료되면 다시 foo함수로 이동한다. foo함수도 더 이상 수행할게 없으므로 종료된다.
5.전역 코드로 복귀
foo함수가 종료되어 전역으로 복귀한다. 마찬가지로 더 이상 수행할게 없으므로 종료되고 빈 상태가 된다.
실행 컨텍스트는 자바스크립트의 동작 원리에 있어서 중요한 개념이다.실행 컨텍스트를 이해하면 스코프,스코프 체인,렉시컬 환경 등의
개념에 대한 이해가 가능하다. 렉시컬 환경은 클로저와 밀접한 관련이 있다. 다음에는 클로저를 정리.