Is there variable hoisting for let or const in JavaScript? Is it to put the variable in the TDZ area?
The way I choose to think about it is the following:
Variables have three "stages": declaration (it exists in the scope), initialization (you can reference it, and it has the value undefined
), assignment (it has whatever value the code assigns to it).
var x = 3
hoists the declaration and initialization to the top of the current function's scope, and leaves the assignment (x = 3
) where it is.
let
and const
hoist the declaration to the top of the current block's scope, but leave both the initialization and the assignment where it is.
The TDZ is the gap between declaration and initialization.
To be specific, if const
and let
did not hoist the declaration at all, then the following code would log 3 - if it hoisted the declaration and the initialization, there'd be no TDZ, and it would log 2. Because it hoists the declaration but not the initialization, it throws a reference error.
const a = 3; { console.log(a); const a = 2; }
(I'm sure many people may have a different mental model, or may disagree with this one; this is the one I hold and how I explain the concepts to newcomers).
Thank you for your answer. With your help, I understand