Home >Web Front-end >JS Tutorial >What Does setTimeout(..., ) Really Mean in JavaScript? (Event Loop Explained!)
Alright, let’s break down this whole setTimeout thing with 0ms. At first glance, you’d think, “Bro, 0ms means it’ll run immediately, right?” But JavaScript has its own vibe, and 0ms isn’t as instant as you’d expect. Let’s figure this out together.
Here’s the code we’re dissecting:
const promise = new Promise((resolve, reject) => { console.log(1); setTimeout(() => { console.log("timerStart"); resolve("success"); console.log("timerEnd"); }, 0); console.log(2); }); promise.then((res) => { console.log(res); }) console.log(4);
And the output?
1 2 4 timerStart success timerEnd
When you see setTimeout(() => { ... }, 0), it feels like the code inside will run immediately after 0ms. But nope, JavaScript is like, “Bro, I’ve got my own system, wait your turn!”
JavaScript doesn’t just run code directly—it has a cool system called the event loop to handle tasks. Think of it like this:
Main tasks (Synchronous):
Stuff like console.log() runs first. These are the direct, in-your-face tasks.
Microtasks (Promises):
Promises come next, even before timers. It’s like they’ve got a VIP ticket.
Task queue (Timers like setTimeout):
Timers go to the back of the line and only run after the microtasks are done. Even if you give it 0ms, it waits.
Let’s see what’s happening step by step:
Promise Created:
Promise .then():
console.log(4):
Microtask Runs (VIP):
Task Queue Runs:
Even though you said 0ms, the setTimeout is always deferred. JavaScript pushes it to the task queue, no matter what. The system first clears all synchronous tasks and microtasks (promises) before touching the task queue.
So, in simple terms:
0ms isn’t about the time—it’s about waiting for your turn.
Imagine you’re in a queue for a rollercoaster:
Here’s the order of events in our code:
Understanding how 0ms really works helps you write better asynchronous code. It’s also a cool trick to explain to your friends when they’re debugging random delays in their JavaScript.
So next time you see setTimeout(() => { ... }, 0), just remember—it’s not about the time; it’s about priority!
The above is the detailed content of What Does setTimeout(..., ) Really Mean in JavaScript? (Event Loop Explained!). For more information, please follow other related articles on the PHP Chinese website!