The event loop manages async operations. When you start an async task, JavaScript registers a callback and continues. When the task completes, the callback joins a queue.
The event loop checks: is the call stack empty? If yes, it takes callbacks from the queue and runs them. This cycle repeats forever, handling async results as they arrive.