fullstackBy Zahid Khan
Understanding the JavaScript Event Loop
JavaScript is often described as a single-threaded language, yet it can handle asynchronous operations like API calls, timers, and user interactions without blocking the UI. The secret behind this behavior is the JavaScript Event Loop.
What Does “Single-Threaded” Mean?
Being single-threaded means JavaScript can execute only one task at a time in the call stack. If a long-running task blocked the stack, the entire application would freeze. To avoid this, JavaScript uses asynchronous mechanisms powered by the event loop.
Key Components of the Event Loop
To understand the event loop, you need to know these core parts:
1. Call Stack
Executes synchronous JavaScript code
Follows Last In, First Out (LIFO)
Functions are pushed when called and popped when finished
2. Web APIs
Provided by the browser (or Node.js)
Handle async tasks like:
setTimeout
DOM events
fetch
These APIs run outside the call stack
3. Callback Queue (Macrotask Queue)
Stores callbacks from:
setTimeout
setInterval
UI events
4. Microtask Queue
Higher-priority queue
Includes:
Promises (.then, .catch, .finally)
queueMicrotask
MutationObserver
5. Event Loop
Continuously checks:
Is the call stack empty?
Are there microtasks to execute?
Are there macrotasks waiting?
#javascript