Skip to main content
Practice Problems

What is the call stack in JavaScript?

The call stack is a fundamental mechanism in JavaScript that tracks function execution. It's a data structure that records where in the program we are during execution.

How It Works

The call stack operates on the LIFO (Last In, First Out) principle:

  1. When a function is called, it's pushed onto the stack
  2. When a function completes (returns), it's popped off the stack
  3. The stack keeps track of what function is currently executing

Visual Example

javascript
function first() { console.log('First function'); second(); console.log('First function again'); } function second() { console.log('Second function'); third(); } function third() { console.log('Third function'); } first();

Call Stack Evolution:

1. first() is called Stack: [first] 2. second() is called from first() Stack: [first, second] 3. third() is called from second() Stack: [first, second, third] 4. third() completes Stack: [first, second] 5. second() completes Stack: [first] 6. first() completes Stack: []

Stack Overflow

When functions call each other recursively without a proper base case, the stack can exceed its limit:

javascript
function recursiveFunction() { recursiveFunction(); // No base case! } recursiveFunction(); // ❌ RangeError: Maximum call stack size exceeded

Key Points for Interviews

  • Single-threaded: JavaScript has only ONE call stack
  • Synchronous execution: Code executes line by line
  • Stack frames: Each function call creates a new frame
  • Maximum size: Usually 10,000-15,000 frames (depends on browser/engine)
  • Error tracking: Stack traces in errors show the call stack at that moment

Real-World Example

javascript
function processOrder(order) { console.log('Processing order:', order.id); validateOrder(order); calculateTotal(order); sendConfirmation(order); console.log('Order processed successfully'); } function validateOrder(order) { if (!order.items.length) { throw new Error('Order has no items'); } } function calculateTotal(order) { return order.items.reduce((sum, item) => sum + item.price, 0); } function sendConfirmation(order) { console.log('Sending confirmation to:', order.email); } // Call stack: processOrder({ id: 123, items: [...], email: 'user@example.com' });

Common Interview Questions

  1. Q: What happens when the call stack is empty? A: The event loop checks the callback queue and processes pending callbacks.

  2. Q: Can JavaScript execute code while something is on the call stack? A: No, JavaScript is single-threaded. It must complete the current call stack before moving to the next task.

  3. Q: How do async operations work if JavaScript is single-threaded? A: Async operations are handled by Web APIs (in browsers) or C++ APIs (in Node.js), not the call stack itself.

Short Answer

Interview ready
Premium

A concise answer to help you respond confidently on this topic during an interview.

Finished reading?
Practice Problems