1
resposta

por que não declarar logo a "váriavel = peso/(altura*altura)"

porque na hora de criar a váriavel 'imc' ela tava zero e só depois redeclarou para "peso / (altura * altura)"?

 if ( alturaEhValida && pesoEhValido) {
        var imc = calculaImc(peso, altura);
        tdImc.textContent = imc;
    }
}
    function calculaImc(peso, altura){
        var imc = 0;

        imc = peso / (altura * altura);

        return imc.toFixed(2);
    }
1 resposta

Bom dia José! Tudo bem?

Meu caro, primeiro, eu preciso que você saiba o que é escopo: Tudo que está entre {} é um escopo. Podemos ter um escopo dentro, tudo bem, mas é importante saber o que é. tudo bem? Escopo.

Nós temos alguns tipos de variáveis no JS (var, let, const). No caso da variável do tipo var, podemos dizer que ela se comporta de maneira global. Quando você declara uma variável deste tipo, ela tende a sair do escopo que foi declarada e subir até o primeiro escopo definido. Resumindo, não importa em qual lugar do código você declara uma variável tipo var, vai ser equivalente a declará-la no início do código. Chamamos esse comportamento de "hoisting".

Agora sua dúvida, como as duas variáveis são do tipo var e têm o mesmo nome e também porque esta função será acionada várias vezes no decorrer do código, é possível que, para garantir que não houvesse conflitos, o professor decidiu atribuir o valor 0 na variável antes de implementar a lógica da função.

Bom, espero ter ajudado. Bons estudos!