The Undefined Defined Variable
Article Index
The Undefined Defined Variable
Solution

Solution

The answer to the problem is "hoisting".

When you declare a variable within a function the declaration is automatically moved to the start of the function - i.e. it is hoisted to the top.

You can write Javascript for years without ever running into problems with hoisting or even being aware that it is going on - but when you blunder into it as in our example it can seem very strange.

Notice that hoisting only moves the declaration of the variable and not any initialisation. With hoisting taken into acount our function reads more like:

function test()
{
 var i;
alert(i);
for(i=0;i<10;i++)
{
alert(i);     
}
}

Now it is perfectly clear why i is undefined.

The local variable i has been declared at the start of the function as the result of hoisting so hiding the global variable i which isn't initialised until the for loop starts.

Now it is perfectly obvious why i is reported as undefined.

Notice that the declaring of the variable in the for loop is quite irrelevant to the the problem which would have happened no matter how i was declared. This is all a matter of where i is declared not how.


Banner

Pattern

The pattern that you need to follow to make sure that hoisting never causes you any problem is simple:

always declare, and if appropriate initialize, all of the variables that a function uses at the start of the function.

Following this pattern makes hoisting explicit.

 

 

Banner

More Puzzles

Javascript
Impossible Equalities - a JavaScript puzzle

It is almost folklore that the JavaScript equality operator == is evil and you should always use the strict equality operator === but sometimes it just makes things easier to get JavaScript to do all  [ ... ]


Sharpen Your Coding Skills
Jigsaw Puzzles and The MacMahon Squares

Another puzzle featuring Joe Celko's characterful pair, Melvin Frammis, an experienced developer at International Storm Door & Software, and his junior programmer sidekick, Bugsy Cottman. This cla [ ... ]


PHP
The False String

In some situations compact code is worse than  confusing - it's wrong! Have a go at puzzling out this gotcha in PHP - and then see our solution and the pattern that avoids it.


Other Articles

<ASIN:059680279X>

<ASIN:0470526912>

<ASIN:1590597273>

<ASIN:0596806752>



 
 

   
RSS feed of all content
I Programmer - full contents
Copyright © 2013 i-programmer.info. All Rights Reserved.
Joomla! is Free Software released under the GNU/GPL License.