콜 스택
현재 실행 중인 함수들이 쌓이는 곳입니다.
동작 방식
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!
└────────────┘
콜 스택에는 크기 제한이 있어서, 무한히 쌓이면 터집니다.