One of the sources of most confusion for JavaScript beginners is scoping. The reason scoping is so confusing in JavaScript is because it looks like a C-family language but doesn't behave the same way. Indeed C, and the rest of the C family, has block-level scope. When control enters a block, such as a if statement, new variables can be declared within that scope, without affecting the outer scope. This is not the case in JavaScript.
The following code snippet illustrates this rule :
var x = 1; function fun(){ print(x); // Non-Compliant as x is declared later in the same scope if(something) { var x = 42; // Declaration } } fun(); // Unexpectedly Print 42 and not 1
Whereas the following code snippet is correct :
var x = 1; function fun() { print(x); // 1 if (something) { x = 42; } } fun(); // Print 1