Frameworks change; the language underneath them is what a senior engineer is expected to know cold. Interviewers reach for JavaScript questions because they are framework-neutral and because the answers reveal mental models: whether you can predict the order of console.logs around promises and timers, explain why a closure leaks, say what a module's live binding is, or format a currency without a library. This section is the language at the depth a senior frontend or fullstack candidate needs, pinned to the September 2026 snapshot: ES2026 was ratified in June 2026, Node 24 is the active LTS and Node 26 becomes LTS in October.
async, timers, await ordering and responsiveness follows from it (event loop).this is decided at the call site except for arrows, and prototypes are the object model classes sugar over (closures, scope and this).A warm-up that tests four of the pages at once. Predict the output before running it:
console.log('1 sync')
setTimeout(() => console.log('6 timeout'), 0)
Promise.resolve().then(() => console.log('3 microtask'))
queueMicrotask(() => console.log('4 microtask (queued second)'))
;(async () => {
console.log('2 async body runs synchronously until the first await')
await null
console.log('5 after await: a microtask queued after the two above')
})()
// 1, 2, 3, 4, 5, 6: synchronous code first, then the whole microtask queue in order, then the timer task.
const counter = {
count: 0,
inc() { this.count++ },
incLater() { setTimeout(() => this.count++, 0) }, // arrow: lexical this -> counter
incBroken() { setTimeout(function () { this.count++ }, 0) }, // this is undefined in strict mode (modules)
}
const { inc } = counter
inc() // TypeError in strict mode: `this` is undefined, not counter
Candidates memorise Promise.all versus allSettled and still cannot say why await inside a loop is slow. Interviewers probe the model, not the API surface: what is a microtask, what does a closure hold, what is a live binding. Every page in this section states the model first and the API as a consequence.
process.nextTick (Node) and a requestAnimationFrame (browser) and place them in the order.this and the six kinds of things that keep an object alive; check them against the pages."Strong enough to explain the runtime rather than the API. I can walk through the event loop and predict ordering across timers, promises and await; explain closures, this binding and the prototype chain; describe ESM's live bindings and how bundlers rely on them; use Map, Set, iterators, generators and streams where they fit; find and fix a leak with a heap snapshot; and format dates and money with Intl so the server and the client agree. I also keep up with the language: ES2026 was ratified this June and I know what it added and what is queued for 2027."
Nothing yet. Notes filed here show up on every page of this section.
URL, cookies and browser persistence
The URL as state, cookies for what the server render needs, localStorage and IndexedDB without hydration mismatches, versioned schemas, cross-tab sync, export/import, and the offline basics.
The event loop and async
Tasks, microtasks and rendering, how await desugars, timer semantics, unhandled rejections, cancellation with AbortController, Promise combinators, breaking up long tasks, and the Node differences.