DEV Community

Cover image for How javascript Event Loop Works?
Arslan Younis
Arslan Younis

Posted on

How javascript Event Loop Works?

Asynchronous programming is a powerful feature of JavaScript, allowing for non-blocking operations and better performance. The JavaScript event loop is the mechanism that enables this feature by managing the execution of code in a non-blocking way. In this post, we'll explore how the JavaScript event loop works.

What is the JavaScript Event Loop?

The JavaScript event loop is the mechanism that manages the execution of code in a non-blocking way, enabling asynchronous programming. It consists of two main components: the call stack and the message queue.
The call stack is a data structure that stores function calls. When a function is called, it is added to the top of the call stack. When the function is finished executing, it is removed from the stack.
The message queue is a data structure that stores tasks to be executed. Each task is associated with an event, such as a user click or a timer expiring. When a task is added to the message queue, it is not immediately executed. Instead, it waits until the call stack is empty.
The event loop constantly checks the call stack and the message queue. When the call stack is empty, the event loop takes the first task from the message queue and adds it to the call stack for execution. This process continues until there are no more tasks in the message queue.

Example of the Event Loop in Action

Let's look at an example of how the event loop works. Consider the following code:

console.log('start');

setTimeout(() => {
  console.log('setTimeout');
}, 0);

Promise.resolve().then(() => {
  console.log('Promise');
});

console.log('end');

Enter fullscreen mode Exit fullscreen mode

In this example, we have a console.log statement at the beginning and end of the code block. In between, we have a setTimeout function and a Promise.resolve().then() statement.
When this code is executed, the following happens:

  1. The console.log('start') statement is added to the call stack and executed.

  2. The setTimeout function is added to the call stack and executed. However, because the timeout value is 0, it is immediately added to the message queue.

  3. The Promise.resolve().then() statement is added to the call stack and executed. However, because it is a promise, the then method is added to the message queue for later execution.

  4. The console.log('end') statement is added to the call stack and executed.

  5. The call stack is now empty, so the event loop takes the first task from the message queue (which is the setTimeout function) and adds it to the call stack for execution.

  6. The console.log('setTimeout') statement is added to the call stack and executed.

  7. The event loop takes the next task from the message queue (which is the then method of the promise) and adds it to the call stack for execution.

  8. The console.log('Promise') statement is added to the call stack and executed.

Therefore, the output of this code is:

start
end
Promise
setTimeout

Enter fullscreen mode Exit fullscreen mode

Conclusion

In conclusion, the JavaScript event loop is the mechanism that manages the execution of code in a non-blocking way, enabling asynchronous programming. It consists of two main components: the call stack and the message queue. The event loop constantly checks the call stack and the message queue. When the call stack is empty, the event loop takes the first task from the message queue and adds it to the call stack

Top comments (0)