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.
var nome = "Valter";
console.log(nome);
Mas e se quisermos fazer isso… Não vai funcionar horas como eu quero chamar uma variável que inda não existe?
var nome = meuNome;
console.log(nome);
// ReferenceError: meunome is not defined
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.
var nome = meuNome;
console.log(nome);
var meuNome;
//undefined
Isso acontece pelo mesmo motivo anterior a declaração foi arrancada para o topo porem sem a inicialização por isso temos o erro.
console.log( multiplicaNumero(10,20) );
var multiplicaNumero = function(n1,n2){
return n1 * n2
};
//TypeError: undefined is not a function
Dessa forma vai funcionar normalmente pois toda declaração de função não anônima é elevada para o topo do escopo.
console.log(multiplicaNumero(10,10));
function multiplicaNumero (a,b) {
return a*b;
}
// 100
Por isso é uma boa prática declarar ou iniciar variáveis no inicio do escopo.
That’s it.