2
respostas

Gostaria de entender por que tenho que declarar novamente a variavel imc, sendo que ja tenho ela dentro da função:

<meta charset="UTF-8">
<script>
    function pulaLinha() {
        document.write("<br>");
    }

    function mostra(frase) {
        document.write(frase);
        pulaLinha();
    }

    function calculaImc(altura, peso) {

        var imc = peso / (altura * altura);
        return Math.round(imc)
    }
var nome = prompt("QUal é seu nome ?")
var alturaInformada = prompt(nome +" qual é sua altura ?")
var pesoInformado = prompt(nome + " qual é seu peso ?") 
//var imc = calculaImc(alturaInformada,pesoInformado)
mostra(nome + " o seu IMC é igual a : " + imc)

if (imc < 20) {
    mostra("Voce esta abaixo do recomendado")
}
if (imc >= 18.5 && imc <= 35)  {

        mostra("Voce esta com peso normal")
    }
if (imc > 35) {
    mostra("Voce esta acima do peso")
}
</script>

Se o codigo for rodado como exemplificado acima ele da erro e diz que a variavel imc não foi definida.

2 respostas

Acredito que da erro porque na função " function calculaImc(altura, peso)" veja que os parâmetros se chamam "altura, peso" e na formula da variável feita dentro da função o nome delas na formula também são"peso / (altura * altura);". Então quando você recebe pelo prompt a "alturaInformada" e o "pesoInformado", você declara novamente a variável do" imc", porem agora fora da função, então essa variável "imc" vai receber a função "calculaImc" mas agora você vai conseguir colocar os valores adquiridos no prompt de comando no lugar dos parâmetros altura e peso, e na mesma eles entram no mesmo lugar da formula, ou seja você precisa definir novamente a variável "imc" para poder colocar as variáveis adquiridas pelo prompt no lugar dos parâmetros da função, e assim eles são substituídos dos automaticamente dentro da formula e retorna o valor encontrado.

A variável imc dentro da função calculaImc só existe para ela. Ou seja, ela só está disponível dentro da função. Não tem como acessar ela do lado de fora.

A var imc que está do lado de fora não tem nada a ver com aquela da função calculaImc. Tanto que elas tem o mesmo nome, porém exercem funções diferentes.

var imc = calculaImc(alturaInformada,pesoInformado) guarda o cálculo da função:

function calculaImc(altura, peso) {

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