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

Retorno de Funções

O desafio proposto nesta parte do aula está confuso. Ao que indica o exercício, o problema para o formulário não ter funcionado seria os parênteses da função. Porém, na página anterior, a função não é aplicada com parênteses, como segue:

var botaoAdicionar = document.querySelector(".adicionar-paciente"); botaoAdicionar.addEventListener("click", funcaoQueFazAlgo);

function funcaoQueFazAlgo() { console.log("Deu certo") }

Onde está o erro?

Resposta do instrutor { Quando passamos a função sem parênteses, passamos ela como valor, que seria a função por inteira, que será chamada no evento do click. Se colocamos o parênteses, estamos pegando apenas o retorno, que no caso é null. Por isso não é exibido nada quando passamos com parênteses. }

Esta regra é especifica para o eventListener ou é de uso geral de funções no javascript ?

Caso seja geral, se necessário inserir parâmetros e não há necessidade do retorno, qual seria a forma de implementação para não quebrar o processo recebendo o nulo no lugar da execução da função ?

3 respostas
solução!

Fala Diego tudo bom?

Este é um tópico bem interessante então vamos lá!

No JavaScript é comum passarmos funções como parâmetro o addeventListeneré um dos caras mais famosos que recebe funções assim.

Com relação a passar função como valor o instrutor se referiu ao seguinte:

O addEventListener é uma função que recebe o nome de uma interação que o usuário fez e uma função que ele vai executar depois. Se fossemos criar o JavaScript, na hora de implementar essa função ela seria mais ou menos assim

function addEventListener(interacao, funcao) {
    // um monte de código muito louco
    if(interacao == 'click') {
        funcao(evento)
    }
}

Nesse código foi criada a função addEventListener, dentro dela existe uma validação (nesse caso é simbólica), mas com ela podemos ver que, se existe um click, o javascript chama o segundo parâmetro, que é a função e executa ela la dentro. O que faz a função ser executada é a passagem dos parenteses ao final do nome dela. (para testar isso digite alert no console e depois alert() e veja os resultados, no primeiro só é retornado o código da função e no segundo ela é executada)

Sabendo que quem executa a função é o addEventListener, lá dentro ele define quais parametros vão ser passados, nesse caso ele manda um por padrão que é o de evento.

Cada função nativa do JavaScript tem seus próprios parâmetros que são passados e para checar, é só consultar a função em sites como a MDN

Por fim, deixo aqui o addEventListener para você dar uma olhada: https://developer.mozilla.org/pt-BR/docs/Web/API/Element/addEventListener

Espero ter ajudado :)

quando colocamos o parenteses estamos invocando ou seja chamando a função,sendo que o addEventListener e quem deve chamar a função e não a gente, esse e um dos motivos também alem do que você mencionou de não por o () quando passar por parâmetro a função ao addEventListener,respondendo sua pergunta agora,quando queremos que um evento chame a função e não a gente devemos passar sem o () como por exemplo o onclick, se colocarmos assim botao.onclick=funcao(); o que tem dentro da função vai executar porque nos estamos invocando ela, e não e isso que a gente quer,queremos que ela seja executada só quando for efetuado o evento que passamos,e sempre que invocamos uma função através de um evento ele sempre passa um parâmetro para a função que e o event,o evento que ocorreu,nele pode pegar posição do click por exemplo, o x e y e outras coisas,para ter acesso e só por na função para ele receber um parâmetro exemplo: function exemplo(event). espero ter ajudado e bons estudos.

Desculpem, acho que ficou um pouco vago minha questão. Na verdade o foco da minha duvida não é no evento e sim na função, mas acho que esta duvidas serão resolvidas um pouco mais pra frente quando estiver fazendo o de es6.

Tenho algumas duvidas sobre os retornos de função mas acredito que vou ter de aprender promisses primeiro para solucionar essas duvidas.

Vou encerrar a dúvida. Obrigado pela atenção.