Antes algumas informações
Parece ser uma informação básica porem podemos nos surpreender com a quantidade de desenvolvedores javascript que podem se perder nesse conceito, por pensar que por javascript ser parecido com java (alias ela herda algumas coisas realmente), é a mesma linguagem porem não é e possui sua particularidades, com alguns exemplos de código poderemos entender.
dito isso vamos lá então…
Temos o seguinte código que é uma declaração normal e vai funcionar perfeitamente, perceba que estou declarando e inicializando a variável nome
para so depois chamar a mesma.
Mas e se quisermos fazer isso… Não vai funcionar horas como eu quero chamar uma variável que inda não existe?
Mas e agora dessa forma… Não recebemos mais um erro agora nosso valor é undefined, entenda que a variável já existe mesmo antes de ela ter sido declarada no código isso acontece pois o javascript sobe as declarações (sem a inicialização) para o topo do código e o mesmo acontece com funções por definição.
Isso acontece pelo mesmo motivo anterior a declaração foi arrancada para o topo porem sem a inicialização por isso temos o erro.
Dessa forma vai funcionar normalmente pois toda declaração de função não anônima é elevada para o topo do escopo.
Por isso é uma boa prática declarar ou iniciar variáveis no inicio do escopo.
That’s it.