Stack Overflow
Stack Overflow
Section titled “Stack Overflow”Introduction
Section titled “Introduction”Stack overflow occurs when the call stack exceeds its maximum size. This happens with infinite recursion or extremely deep function calls.
Infinite Recursion
Section titled “Infinite Recursion”function infinite() { return infinite(); // calls itself forever}
// RangeError: Maximum call stack size exceededinfinite();Visual
Section titled “Visual”flowchart TD A["infinite()"] --> B["infinite()"] B --> C["infinite()"] C --> D["..."] D --> E["💥 Stack Overflow!"] E --> F["RangeError thrown"]
style E fill:#f44336,color:white style F fill:#f44336,color:whiteMaximum Stack Size
Section titled “Maximum Stack Size”let depth = 0;function measure() { depth++; measure();}
try { measure();} catch (e) { console.log(`Max stack depth: ${depth}`);}// V8 typically ~10,000 frames; depends on environmentReal Causes
Section titled “Real Causes”// 1. Accidental infinite recursionfunction factorial(n) { // ❌ Missing base case return n * factorial(n - 1);}
// ✅ With base casefunction factorial(n) { if (n <= 1) return 1; // base case return n * factorial(n - 1);}
// 2. Deep object traversal without cycle detectionfunction deepClone(obj) { // ❌ Circular reference will overflow return { ...obj, nested: deepClone(obj) };}
// 3. Event loop starvationfunction loop() { processNext(); loop(); // never yields to event loop}Prevention
Section titled “Prevention”// 1. Always use base cases in recursion// 2. Track depth for safetyfunction safeRecursive(n, maxDepth = 1000) { if (maxDepth <= 0) throw new Error('Max depth exceeded'); if (n <= 1) return 1; return n * safeRecursive(n - 1, maxDepth - 1);}
// 3. Convert deep recursion to iterationfunction factorialIterative(n) { let result = 1; for (let i = 2; i <= n; i++) result *= i; return result;}Summary
Section titled “Summary”- Stack overflow = call stack exceeds maximum size
- Most common cause: infinite recursion
- Typical limit: ~10,000 frames (V8)
- Always use base cases in recursion
- Consider iterative alternatives for deep operations