Не нужно передавать аргумент в addEventListener? - PullRequest
0 голосов
/ 14 мая 2018

Почему мне не нужно передавать аргумент при добавлении playSound(e) к addEventListener? Как автоматически проходит событие?

function playSound(e) {
  const audio = document.querySelector(`audio[data-key="${e.keyCode}"]`);
  const key = document.querySelector(`.key[data-key="${e.keyCode}"]`);
  if (!audio) return; //stop the function from running
  audio.currentTime = 0; // rewinds to the start
  audio.play();
  key.classList.add("playing");
}

window.addEventListener('keydown', playSound);

Код работает как есть

Ответы [ 2 ]

0 голосов
/ 14 мая 2018

Сначала вы определили функцию. В обычных сценариях мы будем называть эту функцию кое-где. Но в этом случае вы хотите вызвать его, когда срабатывает событие нажатия клавиш. Для этого вы передали эту функцию событию keydown в качестве обратного вызова. Нечто подобное происходит за кулисами.

function keydown(callback) {

 var e = getEvent(); // here it will get you the event object.
 callback(e); // here your function playSound is called.

}
0 голосов
/ 14 мая 2018

Подумайте об этом так:

function addEventListener(event, handler) {
  const eventObject = new Event();

  switch(event) {
    case "keydown":
      handler(eventObject);

  }
}

Очевидно, что это упрощенная версия, но передаваемая вами функция вызывается с аргументом addEventListener

...