콜 스택

현재 실행 중인 함수들이 쌓이는 곳입니다.

동작 방식

function a() {
    b();
}

function b() {
    c();
}

function c() {
    console.log("hello");
}

a();
[Call Stack 변화]

a() 호출    →  │ a() │
               └─────┘

b() 호출    →  │ b() │
               │ a() │
               └─────┘

c() 호출    →  │ c() │
               │ b() │
               │ a() │
               └─────┘

c() 끝      →  │ b() │
               │ a() │
               └─────┘

b() 끝      →  │ a() │
               └─────┘

a() 끝      →  (비어있음)

LIFO(Last In First Out) — 마지막에 들어온 게 먼저 나갑니다.


에러 메시지에서 보는 콜 스택

function a() { b(); }
function b() { c(); }
function c() { throw new Error("에러!"); }
a();
Error: 에러!
    at c (index.js:3)
    at b (index.js:2)
    at a (index.js:1)

이게 콜 스택입니다. 어떤 함수가 어떤 함수를 호출했는지 추적할 수 있어요.


Stack Overflow

function infinite() {
    infinite();  // 자기 자신을 계속 호출
}
infinite();
│ infinite() │
│ infinite() │
│ infinite() │
│    ...     │  ← 스택이 꽉 참 → Stack Overflow!
└────────────┘

콜 스택에는 크기 제한이 있어서, 무한히 쌓이면 터집니다.

CSLOG에서 보기