그런데 왜 호출 스택에 (anonymous), a, b, console.trace 순으로 쌓였을까요? 이는 호출 스택이 무엇인지 알면 이해할 수 있습니다. 호출 스택은 바닥이 막히고 천장은 뚫린 하나의 통입니다. 이 통에는 물건을 한 개씩 넣을 수 있고, 뺄 때도 한 개씩 뺄 수 있습니다. 하나씩 차곡차곡 쌓이는 구조이므로 위에 있는 물건을 빼야만 아래 물건을 뺄 수 있습니다. 즉, 마지막에 넣은 물건이 뺄 때는 가장 먼저 빠집니다. 이러한 구조를 프로그래밍에서 스택(stack)이라고 합니다.
함수를 호출할 때 해당 함수를 호출 스택 안에 넣습니다. 그리고 함수가 종료될 때 호출 스택에서 빼냅니다. 다음과 같이 a() 함수를 호출한다고 합시다.
function a() {}
a();