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

Function

Durante a aula onde o professor cria a seguinte função:

function calculaImc(peso, altura) { let imc = 0;

imc = peso / (altura * altura)

return imc

}

Eu tentei fazer dessa forma:

const calculaImc = (peso, altura) => { let imc = 0;

imc = peso / (altura * altura)

return imc

}

Gostaria de saber o porque com a arrow function o programa não funcionou, eu declarei errado? Obrigado!!

4 respostas

Oi Victor, como vai?

Testei aqui sua função e ela está funcionando perfeitamente! Deu algum erro ou algo do tipo hora que você chamou a função? Poderia mandar aqui, se houve alguma declaração de erro, ou até mesmo o modo que você está chamando a função?

Fico no aguardo, abraços =)

Olá Giovanna,

O console me retorna o seguinte erro:

calculaIMC.js:34 Uncaught ReferenceError: Cannot access 'calculaImc' before initialization at calculaIMC.js:34

Estranho que com a primeira opção (feita em aula) da tudo certo

solução!

Oi Victor!

Isso acontece pois quando utilizamos Arrow Function, precisamos declará-la antes de chamá-la de fato. Veja que a função está declarada no fim do código, porém sendo chamada antes. Para arrumar isso, podemos colocar a arrow function no início do nosso código, logo antes do for, dessa maneira:

const calculaImc = (peso, altura) => {
    var imc = 0;
    imc = peso / (altura * altura);

    return imc.toFixed(2);
}

for (var i = 0; i < pacientes.length; i++) {

    var paciente = pacientes[i];

    var tdPeso = paciente.querySelector(".info-peso");
    var peso = tdPeso.textContent;

    var tdAltura = paciente.querySelector(".info-altura");
    var altura = tdAltura.textContent;

    var tdImc = paciente.querySelector(".info-imc");

    var pesoEhValido = true;
    var alturaEhValida = true;

    if (peso <= 0 || peso >= 1000) {
        console.log("Peso inválido!");
        pesoEhValido = false;
        tdImc.textContent = "Peso inválido";
        paciente.classList.add("paciente-invalido");
    }

    if (altura <= 0 || altura >= 3.00) {
        console.log("Altura inválida!");
        alturaEhValida = false;
        tdImc.textContent = "Altura inválida";
        paciente.classList.add("paciente-invalido");
    }

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

Espero ter ajudado, bons estudos =)

Poxa, não sabia que a arrow tinha essa particularidade, muito obrigado pelo feedback!!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software