Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Variáveis de função

Olá, por favor, nesse programa do IMC, tentei fazer assim:

mostra ("O imc da Dani é " + imc);

O imc só está declarado aqui: " }

function calculaImc(peso, altura) {

    var imc = peso / (altura * altura);

}

mostra ("O imc da Dani é " + imc); " No console, diz que o imc não está definido. Então, eu posso entender, que no document.write não é possível usar variáveis declaradas dentro das funções fora das funções?

Muito obrigada.

3 respostas

Olá Daniela, tudo bom?

Entender escopo no javascript pode realmente ser complicado, mas vamos lá!

As variáveis (var) estão "presas" no contexto de execução as quais estão declaradas, enquanto variáveis não declaradas sempre são globais, veja o exemplo abaixo:

function qualquer() {
  y = 1;   // Erro de referência no strict mode
  var z = 2;
}

qualquer();

console.log(y); // loga "1" 
console.log(z); // Erro de referência: z is not defined outside qualquer

Variáveis declaradas são criadas antes de qualquer código, enquanto variáveis não declaradas só são criadas quando o interpretador passa pelo código de atribuição delas.

No javascript temos o que chamamos de Hoisting (içamento).

Hoisting

Declarações no javascript (variáveis, functions..) são processados antes de qualquer código, ou seja, elas são içadas para o topo do seu código independentemente de onde foram declaradas no código "original"

numero = 2;
var numero;
// ...

// É implicitamente entendido como:

var numero;
numero = 2;

Por isso é sempre recomendado declararmos as variáveis no topo de seu escopo, seja dentro de funções ou no escopo global. Facilitando o entendimento sobre qual escopo as variáveis estão declaradas

É importante salientar que o hoisting só iça a declaração da variável e não a atribuição da mesma.

ex:

function faz_algo() {
  console.log(numero); // undefined
  var numero = 111;
  console.log(numero); // 111
}

//É implicitamente entendido como:

function faz_algo() {
  var numero;
  console.log(numero); // undefined
  numero = 111;
  console.log(numero); // 111
}

No seu caso, você declarou sua variável dentro da function, como dito no início do post, essa variável está presa no contexto de execução, por isso você não terá acesso de fora, mas nada te impede te retornar esse valor utilizando o return!

Daniela, tudo isso pode parecer complexo no início, mas com o tempo tenho certeza que você vai tirar isso de letra! Qualquer dúvida pode contar comigo e com a comunidade para te ajudar.

Espero ter contribuído para sua jornada!

Abraços e bons estudos!

solução!

Oi, Paulo! Entendi o que você explicou. Muito obrigada!

Oi Daniela você ainda tem alguma dúvida te ajudo em algo mais ou já foi solucionada, se já foi solucionada, você pode marcar a resposta do Paulo como solução, basta você clicar no botão marcar como solução, essa é uma boa prática aqui no fórum, isso ajuda outros alunos que buscam dúvidas semelhantes a sua aqui no fórum a identificar a solução encontrada.