실행 컨텍스트 (execution context)
- 단어를 풀자면 실행의 문맥이라는 뜻이다.
- 자바스크립트의 동작 원리를 담고 있는 핵심개념으로, 자바스크립트 코드를 평가하고 실행하는 규칙이라고 할 수 있다.
실행 컨텍스트를 쉽게 이해하기 위해서는 4가지 소스코드 타입을 알아둘 필요가 있다.
설명의 자세한 이해가 어렵다면 소스코드만 일단 눈에 익혀보자.
- 전역 코드(global code) : 전역에 존재하는 소스코드를 말한다. 전역에 정의된 함수, 클래스 등의 내부 코드는 포함되지 않는다.
- 함수 코드(function code) : 함수 내부에 존재하는 소스코드를 말한다. 함수 내부에 중첩된 함수, 클래스 등의 내부 코드는 포함되지 않는다.
- eval 코드(eval code) : 빌트인 전역 함수인 eval 함수에 인수로 전달되어 실행되는 소스코드를 말한다.
- 모듈 코드(module code) : 모듈 내부에 존재하는 소스코드를 말한다. 모듈 내부의 함수, 클래스 등의 내부 코드는 포함되지 않는다.
const x = 1;
function foo() {
const y = 2;
function bar() {
const z = 3;
console.log(x + y + z);
}
bar();
}
foo();
코드 요약(컨텍스트 개념)
- 자바스크립트 엔진은 먼저 전역 코드를 평가하여 전역 실행 컨텍스트를 생성하고 실행 컨텍스트에 푸쉬한다.
x 변수에 값이 할당된다. 읽어나가면서 foo 함수 내부로 진입한다. - foo 함수 내부에 진입하여 함수 코드를 평가하며 실행 컨텍스트에 푸쉬한다. y 변수에 값이 할당된다. 읽어나가면서 bar 함수에 진입한다.
- bar 함수 내부에 진입하여 함수 코드를 평가한다. bar 함수도 실행 컨텍스트에 푸쉬된다. z 변수에 값이 할당된다. log 메서드를 호출한 뒤 bar 함수는 종료된다.
- bar 함수가 종료되며 foo 함수로 제어권이 넘어가나 실행될 코드가 없어 전역 코드로 복귀한다.
- 더이상 실행할 전역코드가 없으므로 실행 컨텍스트는 비어있게 된다.
bar 함수 |
foo 함수 |
전역 코드 |
push되어 들어오고 pop되어 나간다.
실행 컨텍스트는 스택 자료구조로 관리되며,
이를 실행 컨텍스트 스택이라고 한다.
'Javascript' 카테고리의 다른 글
(JS) 이벤트 루프(event loop)와 태스크 큐(task queue) (2) | 2022.06.09 |
---|---|
(JS) 동기(synchronous)와 비동기(asynchronous) (0) | 2022.06.09 |
(JS) 스코프 (0) | 2022.06.08 |
(JS) 메서드, this (0) | 2022.06.02 |
(JS) 화살표 함수 기초(함수 표현식의 간결화) (0) | 2022.06.02 |