JS

runtime.js

One spine: the evolution of JavaScript

Pick an era, expand a concept, and see where it lands in today's runtimes. Every snippet can be dropped straight into the sandboxed console — the event loop panel then shows real, instrumented execution, not a looping animation.

Pre-ES6

ES51995 – 2014

One function scope, one binding keyword, and callbacks all the way down. Everything that came later is a reaction to this era's sharp edges.

Before Promises, asynchrony meant passing continuations. Errors travelled as a first argument by convention — nothing in the language enforced it.

function readValue(key, cb) {
  setTimeout(function () {
    cb(null, key.toUpperCase());
  }, 0);
}

readValue("a", function (err, a) {
  readValue(a + "b", function (err, b) {
    readValue(b + "c", function (err, c) {
      console.log("nested result:", c);
    });
  });
});

Interview gotchas

15 genuinely tricky, well-known snippets — event-loop ordering, closures in loops, and `this`-binding traps. Open one, read the gotcha, then drop it straight into the sandboxed console to watch it really run.

Event loop
Closures & scope
this binding
Promises & async
Coercion & equality
Built-in traps