What actually happens between you hitting save and your code running.
A JavaScript engine is the program that takes your source code and makes it run — V8, SpiderMonkey, and JavaScriptCore are all implementations of the same job with different internals. Broadly, every engine parses your code into an AST, generates bytecode from it, and starts executing that bytecode in an interpreter so the program can begin running almost immediately, without waiting on a full compile pass.
But an engine is more than just a compiler. It owns the call stack, the heap, and garbage collection, and it's paired with a runtime (the browser or Node.js) that supplies things the language spec doesn't define — timers, the DOM, file system access — through an event loop and callback queues. Understanding where the engine's job ends and the runtime's job begins is often what separates someone who's memorized 'JavaScript is single-threaded' from someone who can actually explain why a setTimeout(fn, 0) doesn't run immediately.
What you'll walk away knowing