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

Calculando IMC - dúvida

Boa noite, posso manter as variáveis pesoFlavio alturaFlavio pesoAmigo alturaAmigo da seguinte forma?

<meta cherset="UTF-8">
<script>
    function pulaLinha(){
        document.write("<br><br>");
    }
    function mostra(frase){
        document.write(frase);
        pulaLinha();
    }
    function calculaIMC(altura,peso){
        var imc=peso/(altura*altura);
        mostra("O imc calculado é ")+imc;
    }
    var pesoFlavio= 76;
    var alturaFlavio= 1.71;
    var pesoAmigo= 68;
    var alturaAmigo= 1.72;
calculaIMC(alturaFlavio,pesoFlavio);
calculaIMC(alturaAmigo,pesoAmigo);
</script>
2 respostas

Se tratando de funções, sim. Você pode colocar variáveis antes ou depois das declarações de funções. No entanto, isso só funciona especificamente para funções. Se você tentar fazer qualquer outra coisa antes dessas declarações de variáveis, o JavaScript vai retornar um erro.

Tenta fazer isso antes de qualquer função e das variáveis, você receber um erro:

var imc = pesoFlavio / (alturaFlavio * alturaFlavio);
console.log(imc);

ou isso:

console.log(calculaIMC(alturaFlavio,pesoFlavio));

    function calculaIMC (altura,peso) {

        var imc = peso / (altura * altura);
        return imc;
    }

    var pesoFlavio= 76;
    var alturaFlavio= 1.71;
    var pesoAmigo= 68;
    var alturaAmigo= 1.72;

Isso acontece porque as variáveis, como a pesoFlavio, por exemplo, está no Global Scope (que podem ter acesso global). Quando eu digo que elas podem ter acesso global, quero dizer na verdade que as Funções tem acesso a elas.

As funções tem acesso a variáveis das seguintes formas:

  1. Por argumentos (calculaIMC(alturaAmigo,pesoAmigo));
  2. Por Scope Chain. Funções podem acessar váriaveis de fora do Function Scope dela.

De outra forma, funções tem o seu próprio espaço. Se você declarar uma variável dentro de uma função, e tentar acessar ela sem estar dentro das chaves { }, você vai receber um retorno com undefined do JavaScript.

Por exemplo, tente acessar a variável imc fora da função calcularIMC().

    function calculaIMC(altura,peso){
        var imc=peso/(altura*altura);
        mostra("O imc calculado é ")+imc;
    }
    console.log(imc)

Mas enfim, a resposta é não. Isso é uma má prática. Não coloque variáveis em ordem só porque é bonito ou organizado. Outras pessoas vão ler o teu código e não vão entender o que exatamente todas essas variáveis fazem no final do teu código. Fora que se tu quiser transformar elas em outra coisa, você não vai poder. Se você tiver ainda com dúvida onde colocar as variáveis do teu código, declare no topo do programa, especialmente as variáveis que você quer reutilizar mais tarde.

JavaScript não lê o teu código de baixo pra cima, mas ao contrário. Sempre começa do topo para baixo ↓

solução!

Oi Felipe, tudo Bem? Obrigado pelo feedback.

Eu cometi um erro deixando o +imc de fora dos parêntesis mostra("O imc calculado é ")+imc;.

Correção: mostra("O imc calculado é "+imc);

Em relação às variáveis, não entendi "Não coloque variáveis em ordem só porque é organizado". A intenção não é organizar o código?

Minha dúvida não era sobre onde colocar as variáveis e sim se poderia mantê-las porque o instrutor as tinha apagado para colocar só os números.

Mas já que você comentou sobre declarar as variáveis no topo do programa, o Flávio ensinou que as "funções" devem ser declaradas no topo. Você acha que é melhor declarar as variáveis antes de declarar as funções?