The declaration and the value are separate. When hoisted, this code would read something like this:
var a;
var a;
a = function() {};
typeof a; // "function"
a = false;
typeof a; // "boolean"
The two instances of var a are declarations of the variable a, and have nothing to do with the values assigned. The function and false are assignments.
2
u/[deleted] Jul 19 '21
the only difference is, that you can't redeclare a
let/constvariable and thatvarvariable are hoisted to the top. There is no cost.