Em JS, as variáveis são içadas (declaradas) para o topo do escopo.
Isso significa que a seguinte função:
function fn() {
alert("Hello " + world);
var world = "world";
}
Na verdade, será avaliado como:
function fn() {
var world;
alert("Hello " + world);
world = "world";
}
É por isso que JS não vai incomodá-lo com variáveis não inicializadas, e é por isso que acho que a melhor prática é declarar suas variáveis onde elas estarão eventualmente – no topo do escopo. Dessa forma, você mesmo pode identificar os problemas.
Você também pode usar isso: http://www.jslint.com/lint.html
O exemplo acima alertará ‘Hello undefined’.