I've been reading about JavaScript hoisting sometime back.
JavaScript Scoping and Hoisting by Ben Cherry
Two words about “hoisting” by Dmitry Soshnikov
and, some more about JavaScript type-coercion, truth & false test: Truth, Equality and JavaScript and some other resource
And while practicing some, and found I m missing some important concept about the hoisting and a variable' truthy & falsy.
1: 'if' truth test with duplicate variable declaration
var foo = 1;
function bar() {
if (!foo) {
alert('inside if');
var foo = 10;
}
}
bar();
o/p: inside if
Doubt: 'foo' value being '1', if(!foo)
should evaluates to false
and that block should not be executed (quoting from above resources: hoisting affects only the var
& function
declaration, but not the execution). But why is that alert is shown.
This is not the case if I directly use false
(shown in the below no-tricks code: snippet #3)
2: 'if' truth test without duplicate variable declaration
var foo = 1;
function bar() {
if (!foo) {
alert('inside if');
}
}
bar();
o/p: no output; means control not entered 'if' block
This is what one could expect
3: 'if' using 'false' with duplicate variable declaration
var foo = 1;
function bar() {
if (false) {
alert('inside if');
var foo = 10;
}
}
bar();
o/p: no output; means control not entered 'if' block
This is what one could expect
Someone please clarify. Thanks