Выдержка из книги «Тайны ниндзя JavaScript»:
СОБЫТИЯ АСИНХРОННЫЕ
События, когда они происходят, могут происходить в непредсказуемые временаи в непредсказуемом порядке (сложно заставить пользователей нажимать клавиши или нажимать в определенном порядке). Мы говорим, что обработка событий и, следовательно, вызов их функций обработки, является асинхронной.
Могут происходить следующие типы событий, среди прочего:
■ События браузера, например, когдазагрузка страницы завершена или когда она должна быть выгружена
■ Сетевые события, такие как ответы, поступающие с сервера (события Ajax, серверные события)
■ Пользовательские события, такие как щелчки мыши,мышь перемещается и нажимает клавишу
■ События таймера, например, когда истекает тайм-аут или срабатывает интервал
Все ли перечисленные выше события обрабатываются одной и той же очередью в цикле событий? У меня появилось это сомнение при попытке проверить событие щелчка DOM в сценарии:
<html>
<body>
<button id="bId">A button</button>
</body>
<script>
function testing() {
document.getElementById('bId').addEventListener("click", function () {
console.log('clicked');
})
console.log('before click');
document.getElementById('bId').click();
console.log('after click')
};
testing();
</script>
</html>
Как я понимаю, любые асинхронные события (такие как таймер, обещания), использующие очередь цикла событий, будут ожидать пустого стека вызовов.
ВПриведенный выше код, если события DOM использовали очередь цикла событий, не должен печатать выходные данные clicked
после вызовов функций before click
и after click
console.log()
?
Существуют ли отдельные типы очередей дляразличные виды событий?