The variable scope in javascript can still surprise me. This is a nice one I debugged today: A variable that is not defined by "var" have a global scope. This can be a real pain since the globalization is implicit and easy to forget.
I forgot the "var" when writing a for loop and could not for the life of me figure out what happened when the i-variable got mysteriously reset.
This is an example of a foor loop (in one()) that will never finnish since i is being reset in two(). Defining "var i=0" and all is well.
function one() {
for (i=0;i<20;i++){
if (i > 18) {
two();
}
}
}
function two() {
for (i=0;i<5;i++){
}
alert('two');
}