호출하면 push, 끝나면 맨 위부터 pop
아래 상태는 스택의 아래→위 순서다. 매 순간 가장 오른쪽 프레임의 코드만 실행된다.
global → first() → second() 실행 추적
1
스크립트 시작push
global
2
first() 호출push
globalfirst
3
second() 호출push
globalfirstsecond
4
second() 종료pop
globalfirst
5
first() 종료pop
global
6
전역 코드 종료pop
∅ 비어 있음
이 상태표로 함께 읽을 것
LIFO마지막에 쌓인 컨텍스트가 가장 먼저 끝난다.
다음 task현재 동기 스택이 비어야 이벤트 루프가 넘겨준다.
stack trace오류 시 쌓여 있던 호출 경로를 역으로 추적한다.
closure프레임이 pop돼도 참조된 렉시컬 환경은 남을 수 있다.
핵심: 코드는 단순히 위에서 아래로만 흐르지 않는다. 중첩 호출 깊이만큼 쌓였다가 반환 순서로 풀린다.