The event loop
Why the log printed last
The synchronous run finishes first, and all of it. Then two queues, in order. · 12 minutes
Nothing you queue runs while there is still synchronous work to do. Not a promise that already resolved, not a timer with a zero delay. The current run finishes, entirely, and only then does anything else get a turn.
Then the microtask queue drains — all of it, including anything queued while it was draining — and only after that does the earliest timer fire.
`setTimeout(f, 0)` then `Promise.resolve().then(g)` then `console.log('last line')` — what order?