[실행 컨텍스트] JS 코드 실행 순서
자바스크립트 코드는 어떤 순서로 실행될까?
- 자바스크립트는 스택 자료 구조를 통해서 코드의 실행 순서를 관리한다.
- 실행 컨텍스트 스택은
소스 코드 평가 → 실행 컨텍스트 생성 → 실행 컨텍스트 스택에 추가
의 과정을 통해 추가된다. - 따라서 실행 컨텍스트 스택 최상위는 현재 실행 중인 코드의 실행 컨텍스트를 의미한다.
예시로 살펴보자
const x = 1;
function foo() {
const y = 2;
function bar() {
const z = 3;
console.log(x + y + z);
}
bar();
}
foo();
// 6
1. 전역 코드 평가와 실행
- 전역 코드 평가 -> 전역 실행 컨텍스트 생성 -> 실행 컨텍스트 스택에 푸시
전역 변수 x
와전역 함수 foo
가 전역 실행 컨텍스트에 등록됨.- 전역 실행 컨텍스트 전역 코드가 실행되기 시작하면
전역 변수 x
에 값이 할당되고전역 함수 foo
가 호출됨.
2. foo 함수 코드의 평가와 실행
전역 함수 foo
가 호출되면 전역 코드 실행 일시 중단, 코드의 제어권이 foo 함수 내부로 이동함.foo 함수
내부의 함수 코드를 평가 →foo 함수
실행 컨텍스트를 생성하고 실행 컨텍스트 스택에 푸시- 이때
foo 함수
내부의지역 변수 y
와중첩 함수 bar
가foo 함수
실행 컨텍스트에 등록됨. foo 함수
코드가 실행되면지역 변수 y
에 값이 할당되고중첩 함수 bar
가 호출됨.
3. bar 함수 코드의 평가와 실행
bar 함수
호출 시작foo 함수
실행 일시 중단 & 코드 제어권이bar 함수
내부로 이동bar 함수
코드 평가 후bar 함수
실행 컨텍스트 생성 & 실행 컨텍스트 스택에 푸쉬- 이때
bar 함수
의지역 변수 z
가bar 함수
실행 컨텍스트에 등록됨. bar 함수
코드가 실행되면지역 변수 z
에 값이 할당되고console.log
메서드 호출 한 뒤bar 함수
종료됨.
4. foo 함수 코드로 복귀
bar 함수
가 종료 → 코드 제어권이foo 함수
로 이동- 자바스크립트 엔진은
bar 함수
실행 컨텍스트를 실행 컨텍스트 스택에서 팝하여 제거
5. 전역 코드로 복귀
foo 함수
종료 → 코드 제어권은 다시 전역으로 이동foo 함수
실행 컨텍스트를 실행 컨텍스트 스텍에서 팝하여 제거- 스택이 비게 됨.