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

Dúvida sobre média das idades.

<meta charset="UTF-8">

<script>

function pulaLinha() {

    document.write("<br>");
    document.write("<br>");

}

function mostra(frase) {

    document.write(frase);
    pulaLinha();

}

var totalFamiliares = parseInt(prompt("Quantidade de familiares?"));

var numero = 1;

while(numero <= totalFamiliares) {

    var totalIdades = 0;
    var idade = parseInt(prompt("Informe idade do familiar"));
    totalIdades = totalIdades + idade;
    numero++;

}

media = totalIdades/totalFamiliares;
mostra("A média é " + media);
mostra("FIM");

</script>

Olá, minha dúvida é referente ao escopo do while, já estudei lógica de programação em java e lá (se não estiver enganado) se eu declaro uma variável dentro do escopo do while eu não consigo acessa-la fora dele pois quando o laço while terminar as variaveis declaradas dentro dele somem da memória também, porém eu percebi que no código acima eu declaro a variável totalIdades dentro do while, e quando o while finalizar as repetições fora do seu escopo eu consigo pegar o valor de totalIdades atual e fazer a divisão.

Minha dúvida é, em javascript essa regra que ocorre no java sobre declaração de variáveis dentro de um escopo não se aplica? Eu posso declarar uma variavel dentro de um escopo e conseguir acessa-la fora dele também

4 respostas
solução!

Faaaaaala, Guilherme, beleza?

Esta é uma boa dúvida. A resposta rápida é sim e não hehe. O que está acontecendo neste caso é a maneira como as suas variáveis estão sendo declaradas no JavaScript, variáveis declaradas dentro de um loop(no JavaScript) com a inicialização "var" não tem o mesmo escopo do loop e sim o mesmo escopo do bloco que o loop está inserido. No caso do seu código,

    var totalIdades = 0;
    var idade = parseInt(prompt("Informe idade do familiar"));

ambas são válidas para o resto do script, caso seu while estivesse dentro de alguma função, o escopo dessas variáveis também só pertenceria a essa mesma função.

Agora, se as variáveis forem inicializadas através de "let", aí o escopo delas realmente pertenceria exclusivamente dentro do loop. Caso ainda esteja curioso sobre o assunto, há esse artigo pode te dar mais detalhes entenda diferenca entre var let e const no javascript

Boa tarde,

Obrigado por esclarecer minha dúvida Filipe, então toda variável do tipo "var" pode ser usada dentro bloco que ela estiver inserida, que no meu caso é <script></script>

Eu ainda fiquei com uma dúvida nessa parte da sua resposta "caso seu while estivesse dentro de alguma função, o escopo dessas variáveis também só pertenceria a essa mesma função."

Se meu while estivesse dentro de alguma função as variaveis continuariam podendo ser acessadas dentro de todo bloco <script></script> ?

Opa, acho que me expressei mal. Vamos supor que voce criasse a function calcularMedia e o while fizesse parte dela, se declarasse uma variável lá usando var, a variável poderia ser usada apenas dentro da calcularMedia, no resto do script nao seria reconhecida.

Entendi, então variaveis dentro da function só existe dentro do escopo da function. Obrigado pela ajuda mais uma vez.