Hoisting variables in JavaScript
This is how the interpreter sees your code,
do_something() {
var foo;
console.log(foo); // undefined
foo = 2;
}
do_something();
So it is printing undefined
. This is a basic of variable hoisting. Your declarations will be moved to the top, and your assignation will remain in the same place. And the case is different when you use let
over var
.
Javascript only hoists declarations, not initializations.
var x = y, y = 'A';
console.log(x + y); // undefinedA
Here, x and y are declared before any code is executed, the assignments occur later. At the time "x = y"
is evaluated, y
exists so no ReferenceError
is thrown and its value is 'undefined'
. So, x
is assigned the undefined value. Then, y
is assigned a value of 'A'
. Consequently, after the first line, x === undefined && y === 'A'
, hence the result.
Variable Declaration
Only the declaration is hoisted. the assigned variables are not hoisted. So you are