'javascript hoisting for global variable

I was wondering how javascript hoisting works for global variable.

Let's say I have following code snippet:

var a = 5;
function print(){
    console.warn("a",a,b);
    var a = 10;
    b=5;
    console.warn("a",a);
}
print();

In this case I am getting error "b is not defined". I wonder why Javascript hoisting is not working for global variable. I tried to look for this but getting results only for variable hoisting. Any thoughts??



Solution 1:[1]

var statements are hoisted. function declarations are hoisted. Assignments are not hoisted (to the extent that if you combine a var statement with an assignment (var foo = 1) then the declaration part is hoisted but the assignment is not).

Solution 2:[2]

Your code is reinterpreted as:

function print(){
    var b
    console.warn("a",a,b); // b is not assigned yet so it's undefined.
    var a = 10;
    b=5;
    console.warn("a",a);
}

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Quentin
Solution 2 James Tang