Let's take a look at the following C code:
#include <stdio.h> int main () { int n = 5; if (1) { int n = 2; } printf("n is %d", n); }
The output of the above code is:
Now let us implement the above code in JavaScript:
var scoping = function () { var n = 5; if (1) { var n = 2; } alert('n is ' + n); };
What do you think the above code alerts?
If you answered n is 5, then you are wrong
This is because, unlike C, JavaScript only supports Function Scope and not Block Scope.
What this means is that JavaScript creates a new scope only with a function:
var scoping = function () { var n = 5; var x = function () { var n = 2; }; alert('n is ' + n); };
Now, n is 5 is alerted because a new scope has been created with the inner function and thus it's encapsulating the inner variable n.