Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

Solucionado (ver solução)

Dúvida => button.onclick = verifica;

Boa tarde professor, entendi a diferença entre:

button.onclick = verifica();

E:

button.onclick = verifica;

Mas e se não seguirmos as boas práticas e criarmos também uma variável com o nome "verifica" o sistema irá reconhecer a variável e não a função correto? (como pude testar colocando o código abaixo e o mesmo devolvendo a mensagem "Teste" e não a função)

    function verifica(){
        (corpo da função)
    }

    var button = document.querySelector("button");
    var verifica = alert("Teste");
    button.onclick = verifica;

Há algum método de sabermos se o onclick irá buscar a função ou uma variável?

3 respostas

Boa noite,

Existe o operador typeof que mostra o tipo do operando passado para ele. Dá uma olhada https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Operators/typeof

Espero ter ajudado!!!

Boa sacada do colega!

solução

Oi 3Brothers Solutions a propriedade onclick está sempre associada a um evento.

elemento.onclick = funçãoReferente(evento);

onde funçãoReferente é uma função - geralmente um nome de uma função declarada em outro lugar ou uma expressão de função.

O evento é gerado quando o usuário clica em um elemento. O evento click ocorrerá após os eventos mousedown e mouseup.

No caso, no seu exemplo em nenhum momento a função verifica será chamada porque você redeclarou a assinatura dela(nome) como uma variável.

E passou o valor dela como sendo: alert("Teste"); O que não é permitido por isso o tipo da variável será undefined. Pois alert é um método do objeto window e não pode ser guardado em uma variável. O navegador executa esse alert pq resolve isso por debaixo dos panos, mas você não conseguirá usar a variável verifica pra manipular o alert e nem a função verifica quando clicar no botão, a não ser que dê outra assinatura pra função.

Espero ter ajudado e bons estudos.