Выбор ответа Middle События обновлено

dispatchEvent синхронный

Вопрос

Что выведет код?

el.addEventListener('ping', () => console.log('handler'));
console.log('before');
el.dispatchEvent(new Event('ping'));
console.log('after');

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: before handler after. dispatchEvent вызывает обработчики синхронно, прямо внутри вызова, поэтому handler окажется между строками.

Варианты ответа

  1. before after handler
  2. handler before after
  3. before after, обработчик не вызовется
  4. before handler afterправильный ответ

Разбор

dispatchEvent вызывает обработчики синхронно, прямо внутри вызова, поэтому handler окажется между строками. Это отличается от событий браузера, которые приходят задачами из очереди, отсюда ошибка первого варианта. Обработчик не может сработать до регистрации события, и он вызовется: событие отправлено на тот же элемент, всплытие для этого не нужно.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме