Hoisting is the pre-execution setup step where JavaScript registers declarations before running code, which explains function access before definition and the temporal dead zone for block-scoped bindings.
Before JavaScript executes a scope, it creates bindings for declarations found in that scope. This setup phase is commonly described as hoisting.
Function declarations are fully initialized during setup, so they can be called before the line where they appear. Variable bindings differ by declaration type.
var creates a binding initialized to undefined during setup. let and const create bindings too, but they are uninitialized until execution reaches the declaration, which creates the temporal dead zone.
Interview framing: define Hoisting in one sentence, then explain one concrete runtime behavior and one common pitfall with a short code example.