Chicken Or The Egg?
There’s a temptation to think that all of the code you see in a JavaScript program is interpreted line-by-line, top-down in order, as the program executes. While that is substantially true, there’s one part of that assumption which can lead to incorrect thinking about your program.
Consider this code:
a = 2;
var a;
console.log( a );
What do you expect to be printed in the console.log(..)
statement?
Many developers would expect undefined
, since the var a
statement comes after the a = 2
, and it would seem natural to assume that the variable is re-defined, and thus assigned the default undefined
. However, the output will be 2
.
Consider another piece of code:
console.log( a );
var a = 2;
You might be tempted to assume that, since the previous snippet exhibited some less-than-top-down looking behavior, perhaps in this snippet, 2
will also be printed. Others may think that since the a
variable is used before it is declared, this must result in a ReferenceError
being thrown.
Unfortunately, both guesses are incorrect. undefined
is the output.
So, what’s going on here? It would appear we have a chicken-and-the-egg question. Which comes first, the declaration (“egg”), or the assignment (“chicken”)?