Local Javascript scoping issue

javascript, scope

Solution

`var a = a;` is actually `var a; a = a;` due to variable hoisting. This means at the time of the assignment the old `a` is already shadowed by the new one (which is `undefined`).

The easiest way to avoid issues like that is passing the value as a parameter:

(function (a) {
    ++a;
    console.log("fn",a);
})(a);

In case `a` is a global variable you could also use `var a = window.a;` like woz suggested - but since having global variables is usually a bad idea better stay with the parameters.

Problem

If I do this: ``` var a = 0; (function () { var a = a; //want to make local a = global a ++a; console.log("fn",a); })(); console.log(a);​ ``` The output is: ``` fn NaN 0 ``` Why does `a` inside of the self executing function become `NaN`? I know it works fine if I do: ``` (function () { var b = a; ++b; console.log("fn",b); // fn 1 })(); ``` But if I go the way of the first version, it has the `NaN` issue. Why is this happening?

Original source

Related problems