4
respostas

Declarando a variável que irá receber a função como

Em algum momento do curso eu aprendi que "var" pode ser utilizada antes de ser declarada, diante disso, tentei atribuir a função "juntar" a uma variável do tipo "var" e chamar essa função em um console.log uma linha acima... levando em consideração que "var" pode ser utilizado antes de ser declarada, não era pra funcionar?

console.log(soma(1, 1));

var soma = function juntar (num1, num2) {return num1 + num2};

4 respostas

Boa noite, você declarou a função antes? Recomendo sempre ou usar const ou let, var possuí muitos bugs e até por isso as outras duas foram criadas.

O comportamento que você está tentando usar é chamado de "hoisting", que ocorre quando as declarações de variáveis (mas não atribuições) são movidas para o topo de seu escopo antes da execução do código. No entanto, isso não se aplica ao valor atribuído à variável, apenas à declaração da variável em si.

No seu código, você está tentando chamar a função soma antes de atribuir a ela a função anônima. Aqui está uma versão corrigida do seu código:

var soma = function juntar(num1, num2) {
  return num1 + num2;
};

console.log(soma(1, 1));

Dessa forma, você declara a variável soma antes de utilizá-la no console.log, e assim o hoisting irá mover a declaração da variável para o topo do escopo. No entanto, é importante notar que o hoisting não move a atribuição da função, então você deve declarar a variável antes de utilizá-la.

Além disso, é uma prática comum usar a declaração function nomeada ao invés de uma function anônima ao atribuir funções a variáveis, pois facilita a identificação da função em ferramentas de depuração. No exemplo corrigido, a função tem o nome juntar.

Acredito que eu mesmo tenha me perdido na hora de fazer a pergunta, Carlos. De qualquer forma, te agradeço pelo retorno.

Dito isso, eu tava tentando fazer algo parecido com isso:

var altura = 5; var comprimento = 2;

console.log(area);

area = altura * comprimento;

var area;

O resultado do trecho do código me retorna (undefined) - O que está correto, pois como eu o console antes da atribuição, minha variável área deve retornar um resultado indefinido.

Tentei fazer a mesma coisa, entretanto, atribuindo uma função para a variável soma, ficou assim:

console.log(soma(1, 2));

soma = function juntar (num1, num2) {return num1 + num2};

var soma;

O resultado do trecho do código em questão me retorna (TypeError: soma is not a function) - Depois de analisar com mais cuidado compreendi o erro, afinal, estou chamando a variável soma, no console, antes de ter atribuído uma função à mesma. E como ela seria a primeira variável a ser "encabeçada" em função do "hoisting", gerará esse erro.

Outra dúvida, Carlos...

Como eu faço pra deixar o trecho do código com a formatação parecida com a do exemplo que você me deu?