
Lydia Hallie on November 20, 2019

Absolutely!

Hi, Lydia!
This is such a great article! 😃
I was looking a clear post about this subject and yours is super comprehensive and well explained (btw, I loved the gifs). I'm planning to talk to my team about the event loop soon (in spanish).
I'm sure you might have heard about this tool that helps you play with this cycle and see in real time how it goes:

The tool is amazing, if we have 2 aysnc functions, the web api section will only show the latest one

Thanks for the great article and animations!
It's interesting why "event loop" question is so common on interviews, if it's job is just to transport code blocks from the queue to the call stack. I think better question would be to ask to describe how the JS mechanism works as a whole thing with call stack, web api, queue and event loop.

Interesting article! What did you use to animate the gifs?

As a true professional I use keynote and screen record it lol

I'm also a visual learner, so this was very helpful. I'm still early on with JavaScript and it's challenging to understand it all; are there any books out there for us visual learner that you might recommend?

Try the book written by a John duckett

Hi Lydia. Thanks for taking the time of generating these animations in order to explain it in a very simple way. Still, I have doubts regarding the Call Stack. Is it the same as the main thread in which JS runs? I mean, I understood that, although JS is single threaded, but for the asynchronous logic that gets executed, NodeJS would spawn threads for it while processing the main logic in the single thread. Thanks in advance :)

This is a great ❓, but probably gets a bit more 'low-level' than we need to just understand the behavior of our JS code with relation to the event loop.
However, my understanding is that the JS Engine/Runtime Environment consists of only the stack and the heap. The stack is what is 🏃🏽♂️on that single thread. Meanwhile, that message queue is part of the asynchronous browser environment. So, JS's single thread runs through call stack on its single thread and then checks that mesage queue to see what else needs to be done on its thread when it has the chance.

Hi@avneeshroks , I have recently cloned and run the NodeJS code and effectively C/C++ are dominant.
Remember that NodeJS is on top of the V8 engine (the one used in the Chrome browser) that Google opensourced and it is natively written in C++, running in the browser and running in a server are two different environments with different purposes and indeed different APIs. NodeJS is literally running on the same engine than Chrome, but for NodeJS it is not needed to have APIs such as those for the DOM, Window, etc as Chrome needs.

Awesome article! This has helped me a lot!
I was thinking about translating this series into Brazillian Portuguese. Do you happen to know if anyone has done it yet? Would you mind me doing it (ofc with links to the original series)

I'm not a JS developer but every now and then I have to dig into it. Over the past few years I've read lots of random things about the event loop but this is the first time I've had a clear picture of what's going on in the web browser (via the web api). Thanks!

Hi, Lydia Hallie can you tell me what is the case with setInterval in call stack a combination of setTimeout and setInterval see the usecase below. Is setInterval also supposed to go to webAPI?
let c = 0;let id = setInterval(()=> {console.log(c++)},200)setTimeout(()=> {clearInterval(id)},2000)// prints/* 012345678 9and then stops */
Really nice article!
One thing I was confused about was
invoke bar. bar returns a setTimeout function.Doesn't setTimeout return an id that you can pass to clearTimeout? 🤔

Yes, It does Jonas, so lets say
letid=setTimeout(()=>{return"hey"},1000);console.log(id)// you will get 1letid2=setTimeout(()=>{return"hey"},1000);console.log(id2)// you will get 2
I have question here...
function hello() { // syncconsole.log("hello");}function afterWhile() { async setTimeout(()=> { console.log("After Timer") }, 0)}afterWhile();hello(); // gets added in callstack then pop it out sequentally;// so callstack is empty here, i guess?!!!! so why callback hasn't been executed here, in this timehello();callstack here carry on one task then remove it, so why callback hasn't executed after popping out instanctly?

Functions are pushed into the the call stack when the callstack is empty AND there are no other line of code to be executed in the main thread... in your case it was not pushed because there was still one more thing to execute in the main thread of execution (the second hello()); Only after completing the second call to the hello function that your callback will be pushed into the callstack...
I hope this helps.

Thank you so much for the illustrations, Lydia! Very helpful, indeed!
One question: what happens when the main thread is blocked - i.e. the UI freezes? Would the whole interaction within that viewport be blocked - e.g. cursor wouldn't change after hovering a link?
I think I've never faced this situation before, so I'm curious how to identify such situation. Is there any way to simulate a huge processing in order to freeze my UI, just to see that?
Thanks in advance!

Hi, you can try this:
function wait5seconds() { const plus5seconds = new Date().getTime() + 5000; while ( plus5seconds > new Date().getTime() ) {} console.log( 'wait5seconds end' ); } function clickHandler() { console.log( 'click event' ); } document.addEventListener( 'click', clickHandler ); // al comunicarme con la API del DOM estoy saliendo de JS wait5seconds(); console.log( 'end script execution' );Execute this script, and press a lot of clicks, the clicks events will appear at the end ( because the dom events are push into the queue.
I think that what you need to take into consideration is when you are performing a task that it might take some time, that might block the UI.

Just write a for loop which is printing millions numbers. Call this function on any click function. You will see the effect.

It's great article I saw. I have no more confused about it. I was trying to learn it but I can't. but Thank God, That I got your article on my browser home page. I want to also thank you daily.dev. they saw your article on my home page and I have come to your article and learned about event loop. Again Thank you so much Lydia Hallie from Omar.

Hi Lydia
This an amazing visualization and demonstration of JavaScript event loop.
I want to ask you permission to translate this article to Persian (Iran's language) with the original post link of course so this article would be more accessible for other readers.

Sure 😃

Hi Lydia, I watched your video and found it really informative. I’ve come across a few Event Loop visualizers before, but none of them really clicked for me, so I ended up building my own:event-loop-visualiser.ishanbagchi.com. Hope the community finds it useful! 😊

Hi, Lydia Hallie, this is a really informative article.
Please make a similar article on event loop in Node.js if possible.
It will be of immense importance to me as I am unable to get a proper explanation with an example.

Hi Lydia,
I'm refreshing my knowledge on the event loop and even though your article is mostly correct, it does not start strong with the incorrect statement:
The
respondfunction returns asetTimeoutfunction.
This is incorrect. Therespond will return an integer. You can easily check this yourself by doing:
constreturned=respond();console.log(returned===parseInt(returned))// true
Good demonstration! But a little issue exists in my opinion.
The 1st animation, when the respond() function was pushed to the call stack and executed, the setTimeout() function should be pushed into the call stack (and executed) as soon as possible, instead of waited for about 1 second. Because, as the first and only one line code inside the respond() function, the call to setTimeout( ) should be executed immediately at that time. The second argument of setTimeout(), 1000ms, has only to do with how long the timer should be waiting to add the callback to the task queue, it does not have any effect for when the setTimeout() should be pushed into the call stack.
I wish I had made this little issue clear. btw, the last animation has the same issue too. Thank you.

This is the greatest article about Event Loop I've ever seen. You provided a complete explanation in a short time—perfect!
I hope you keep providing these videos, they are useful for every web developer.

excelente articulo, pensar que hace unos meses no entendia nada pero guarde el articulo ya que sabia que esto era clave, y ahora de tanto repasar js vanilla, pude entender jeje saludos desde la Patagonia, argentina.

Great explanations and descriptions. Interesting to note that in the final example the timer value is unimportant. Someone who is unaware of how the queue works might be surprised to find that a timer value of 0 still logs "Second" last. Which is actually an easy way to yield to the UI during a long-running process if it can be continued via a timer callback, which will happen virtually immediately if the queue is empty.

The best explanation I've ever seen, thank you for sharing!
What's the role of the HEAP that's mentioned on the first picture?

Good post, I really appreciate the effort you do to explain the things :)

I love gifs! Thanks for explanatio ! Not programming in javascript but was very interesting ti read!

You did a fantastic job of explaining and animating this.

Good stuff, Lydia! You have a very nice and straight-to-the-point way of expressing concepts, I'd love to read some more posts of yours, if you do have any!

Will post them soon 😎

Nice awesome articles and visullay explained the event loops :)

Hi Lydia,
such as great and helpful article! Would it be OK with you to translate it into German and to republish it ondrweb.de/ (with your author bio, of course)?
Thank you, — Markus

Absolutely!

what about microtasks?

As a newbie to learning JS I appreciate your post and look forward to others.
bigleegeek

Nice article! Thanks for share!

Thanks!

I was, currently and still impressed and wowwwwwed by this article. its as if this is the first time i am seeing a Promise.
Great article

What if there are no functions is the program?.lets say i have 10 instructions like variable deceleration, assignment , arthematic operations etc. Will all these instructions also go to call stack?
Var a = 10:
Var b;
b = a+ 10;

Thanks for the detailed post😃.
I have a question regarding this "Luckily, the browser gives us some features that the JavaScript engine itself doesn’t provide: a Web API. This includes the DOM API, setTimeout, HTTP requests, and so on. This can help us create some async, non-blocking behavior 🚀"
Does the Web API allow us to create asynchronous behavior? Doesn't it just give us features that the JS Engine does not have?
Am I wrong saying it's rather the event loop and the callback queue that allow us to create asynchronous behavior?

Super nice explanation. I've learnt new things with this article. Thanks!

Hm no, not really. Imagine we have 4 tasks, and the 2nd tasks needs a delay. If this delay would've happened on the main thread,nothing would've been able to run on the thread while we were waiting:
However, the web api gives us some sort of asynchronous behavior by letting us put stuff "to the side" so to say. We can now keep on running other tasks, thus keeping an interactive UI, while tasks are running in the background:
Hope this somehow made sense haha I just woke up so my illustrations may not be optimal 😜

So can we say that preventing callback clashes is the queue's job, instead of event loop's one?

Great!

Muchas Gracias Lydia, aunque no pude entender tu video, el texto esta bien explicado y pude traducirlo, se que tengo que aprender Ingles, tan pronto termine el bootcamp hare un curso intensivo de Ingles, igualmente muchas Gracias por tu Articulo <3

Great article and animations!

It's a gift of the Gods for a visual learner like me. Thanks for this ultra helpful article.

Tnx for your effort.

Very informative. Hats off to the explanation!!!

This is a great article, thanks for sharing!

Super helpful and well written.
Thanks for taking your time to share this with us.

Hi@lydiahallie It was an amazing article and animations.
How did you create those animations?

Thanks for this article and also the others. Awesome explanation and awesome GIFs! Cool idea. I hope you have a nice day! :)

And finally i started to understand how the event loop works, thanks a loooot. I've been reading for days feeling confusing. Great job with those gif, love it.

Great job! Here's a deep dive from another presenter:latentflip.com/loupe - and with a live app to show the visualizations.

Fantastic 👍

Looks like "What the heck is the event loop anyway?" by Philip Roberts | JSConf EU
https://www.youtube.com/watch?v=8aGhZQkoFbQ&vl=en

Hi@lydiahallie , thank you for your super comprehensive explanation. All of the gifs are incredible, helped me a lot to understand more about javascript under the hood.

Thanks!!!! This article is amazing 👏👏👏

Great article!
Have you heard of loupe?latentflip.com/loupe/

Lydia, thank you for breaking this down for us! As a visual learner, this is gold!

This is really usuful, the graphics help a lot 🤗

Lydia, big thanks, I have been coding for a while now, always wished I had some visual guidance at the start of my career and here you are. BIG THANKS AND HUGE RESPECT.

Hello Lydia,
I really appreciate you piece of work. Congratulations.

good good good...these visualizations are fabulous !!

Image no longer exists!!!!!

Super helpful! I love this!

Wow, Great Contet, thanks for sharing it!

The visualization helps so much! Thank you very much for putting the time into this.

Great article. JS is so hard to learn

Thanks for the great article.

Great Article Lydia, make this kind of Articles ❤️

Wow, nicely explained :D

Hey Lydia, just wanted to say a huge thank you for this series. I really appreciate it and now I feel like I've got a good grasp on these JavaScript concepts.

Wow...
Amazing article for and amazing topic of JS by an amazing writer with an amazing explanation.
thanks for sharing this.

Gifs are so explicit. You really explained everything perfectly

Fantastic article. Love the way you explain things step-by-step.

This is a Great job.It makes really easy to understand the concept.

I love it! I’m a visual learner too so this helps a lot! Keep going! o/

Hey Lydia, what about event listeners/callbacks? How do they work internally?

These series are such a pearl. Thanks for creating them. I am very happy to have found them.
Wow. This is so helpful since JS is really challenging. Thanks for the effort.

Great article Lydia!

Still learning Java. It's little bit difficult for me. I used it on my projectInfinite Craft

The GIF you put just, make my things so loud and clear, thank you so much.

thanks@lydiahallie

Lydia, what about event callbacks like click, scroll. How do they work?

awesome content!

Hi, Lydia Hallie, it is a great article.
Thanks so much, finally i understand it.

This is so COOL! What did you used in order to do the animations?

Great article
Thanks Lydia

Nicely explained.. thank you so much

Thank you Lydia Hallie fo this article

Why does event loop makes sure the call stack is empty , if there is already a callback function inside queue waiting to be invoked?

Hi, Lydia Hallie, it's good article

I really love this article...
My mind is blown. 🤯
😅
This article is very used fully for me. Thank you Lydia Hallie. 🙂
For further actions, you may consider blocking this person and/orreporting abuse