[실행 컨텍스트] JS 코드 실행 순서
자바스크립트 코드는 어떤 순서로 실행될까?
- 자바스크립트는 스택 자료 구조를 통해서 코드의 실행 순서를 관리한다.
- 실행 컨텍스트 스택은
소스 코드 평가 → 실행 컨텍스트 생성 → 실행 컨텍스트 스택에 추가의 과정을 통해 추가된다. - 따라서 실행 컨텍스트 스택 최상위는 현재 실행 중인 코드의 실행 컨텍스트를 의미한다.
예시로 살펴보자
const x = 1;
function foo() {
const y = 2;
function bar() {
const z = 3;
console.log(x + y + z);
}
bar();
}
foo();
// 61. 전역 코드 평가와 실행
- 전역 코드 평가 -> 전역 실행 컨텍스트 생성 -> 실행 컨텍스트 스택에 푸시
전역 변수 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 함수실행 컨텍스트를 실행 컨텍스트 스텍에서 팝하여 제거- 스택이 비게 됨.