3
respostas

Error na fuction calculaImc()

Bom dia a a todos! Na aula o professor foi feito o encapsulamento da função calcularIMC():

function calculaImc(peso, altura){
    var imc = 0;
    imc = peso / (altura * altura);
    return imc.toFixed(2);
}

Contudo, quis fazer com arrow function e não funcionou:

const calculaImc = (peso, altura) => {
    var imc = 0;
    imc = peso / (altura * altura);
    return imc.toFixed(2);
}

Só que está entregando essa mensagem de erro e não sei como resolver o problema:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Por favor, quero saber se pode usar arrow function, pois só funciona a função nomeada

3 respostas

Thiago, o problema não é o 'arrow function' e sim a ordem q é chamado no código

Quando vc declara uma um function calculaImc ela fica disponível em qualquer parte do código

Já, a const calculaImc só é disponível depois de declarada.

// chamar antes gera erro
let imc = calculaImc( 100, 1.80);

const calculaImc = (peso, altura) => {
    var imc = 0;
    imc = peso / (altura * altura);
    return imc.toFixed(2);
}

const calculaImc = (peso, altura) => {
    var imc = 0;
    imc = peso / (altura * altura);
    return imc.toFixed(2);
}

// chamar depois está ok
let imc = calculaImc( 100, 1.80);
// para function não tem problema chamar antes
let imc = calculaImc( 100, 1.80);

function calculaImc(peso, altura){
    var imc = 0;
    imc = peso / (altura * altura);
    return imc.toFixed(2);
}

Então como ficaria correto, pois ainda dá erro no meu código calcula-imc.js.

for(var i = 0; i < pacientes.length ; i++){
    var paciente = pacientes[i];
    var tdPeso = paciente.querySelector(".info-peso");
    var tdAltura = paciente.querySelector(".info-altura");

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

    var peso = tdPeso.textContent;
    var altura = tdAltura.textContent;

    var alturaEhValida = true;
    var pesoEhValido = true;

    if(peso <= 0 || peso >= 1000){
        pesoEhValido = false;
        tdImc.textContent = "Peso inválido!";

        paciente.classList.add("paciente-invalido");
    }

    if(altura <= 0 || altura >= 3.0){
        alturaEhValida = false;
        tdImc.textContent = "Altura inválida!";

        paciente.classList.add("paciente-invalido");
    }

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

function calculaImc(peso, altura){
    var imc = 0;
    imc = peso / (altura * altura);
    return imc.toFixed(2);
}

Arquivo form.js

var botaoAdicionar = document.querySelector("#adicionar-paciente");
botaoAdicionar.addEventListener("keypress",((e) => {
    e.preventDefault();

    var form = document.querySelector('#form-adiciona')

    var nome = form.nome.value
    var peso = form.peso.value
    var altura = form.altura.value
    var gordura = form.gordura.value

    console.log(`Nome: ${nome} \n Peso: ${peso} \n Altura: ${altura} \n %gordura: ${gordura}`)

    /*  Criando um elemento HTML em Javascript */
    var pacienteTr = document.createElement('tr')

    var nomeTd = document.createElement('td')
    var pesoTd = document.createElement('td')
    var alturaTd = document.createElement('td')
    var gorduraTd = document.createElement('td')
    var imcTd = document.createElement('td')

    /* ----------------------------------------- */

    /* Sobrescrever o valor dentro da tag input do formulário  */

    nomeTd.textContent = nome
    pesoTd.textContent = peso
    alturaTd.textContent = altura
    gorduraTd.textContent = gordura
    imcTd.textContent = calculaImc(peso, altura)

    /* ------------------------------------------------------ */

    /* Inserir o elemento filho ('td') dentro do elemento pai ('tr') */

    pacienteTr.appendChild(nomeTd)
    pacienteTr.appendChild(pesoTd)
    pacienteTr.appendChild(alturaTd)
    pacienteTr.appendChild(gorduraTd)
    pacienteTr.appendChild(imcTd)

    /* ------------------------------------------------------------- */

    /*  Crie minha variável que guarda o novo registro de adicionar pacientes na minha tabela*/
    var tabela = document.querySelector('#tabela-pacientes')
    tabela.appendChild(pacienteTr)

}));

Então, se vc quiser usar const calculaImc tem que colocar no início do código