Não é bem "o javascript sabe que estamos recebendo um evento", e sim ele é passado por parâmetro para a nossa função, no método addEventListener
ele recebe como primeiro argumento o nome do evento que deve ser disparado no elemento, e como segundo argumento uma função que será executada quando o evento for disparado, ou seja, o JavaScript ficará observando esse elemento, e quando o evento que você informou for disparado, essa função será executada e será passado como argumento umobjeto que possui as propriedades do evento.
function addEventListener(eventoQueDeveSerOuvido, funcaoASerExecutada) {
const eventoExecutado;
if(eventoQueDevoSerOuvido === eventoExecutado) {
const event = {
//Propriedades do evento
}
funcaoASerExecutada(event)
}
}
Como pode ver logo acima, o addEventListener
estaria verificando se o evento que deve ser ouvido foi executado, se sim, executa a função passando como argumento o event
que seria as propriedades do evento executado.
Obs:* Essa é uma lógica de exemplo, não significa que essa é a lógica que está por baixo dos panos do método, estou apenas representando como deveria ser.
Essas funções que passamos para outras funções se chamam callbacks, que são nada mais que funções que serão executadas por outras funções em um determinado momento