Выбор ответа Middle События обновлено
dispatchEvent синхронный
Вопрос
Что выведет код?
el.addEventListener('ping', () => console.log('handler'));
console.log('before');
el.dispatchEvent(new Event('ping'));
console.log('after');
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: before handler after. dispatchEvent вызывает обработчики синхронно, прямо внутри вызова, поэтому handler окажется между строками.
Варианты ответа
before after handlerhandler before afterbefore after, обработчик не вызоветсяbefore handler afterправильный ответ
Разбор
dispatchEvent вызывает обработчики синхронно, прямо внутри вызова, поэтому handler окажется между строками. Это отличается от событий браузера, которые приходят задачами из очереди, отсюда ошибка первого варианта. Обработчик не может сработать до регистрации события, и он вызовется: событие отправлено на тот же элемент, всплытие для этого не нужно.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.