@undefined_title

Куда именно регистрируются обработчики асинхронных событий?

в статьях про событийный цикл пишут что обработчики событий регистрируются в окружении, но толком не объясняют и не углубляются, как я понимаю в моем случае(Web) это значит в браузере, но в браузере куда? если в js один поток то как setTimeout паралельно с выполнением отсчитывает время до того как добавлять его в очередь?
  • Вопрос задан
  • 424 просмотра
Пригласить эксперта
Ответы на вопрос 2
Stalker_RED
@Stalker_RED
setTimeout ничего не отсчитывает, он добавляет задание в планировщик.
Это вы читали? https://learn.javascript.ru/settimeout-setinterval
Подробнее про event loop
Ответ написан
crazy_leo
@crazy_leo
Frontend Developer
Например вот код:
console.log("Hello world")
setTimeout(() => console.log("Hello timeout"), 50)
console.log("Hello JS")


Eventloop-у дается задание, выполнить скрипт.
Интерпретатор выполняет первую строку, затем вторую.
Т.е таймер, создается вторая задача. На данный момент их 2.
1) Выполнить скрипт
2) Вызвать таймер не раньше чем 50 мс.

Все задания выполняются по очередно.
Поэтому для начала нужно чтобы скрипт полностью выполнился.
Т.е выводится еще и hello js.

Эта задача удаляется и eventloop смотрит, есть ли у него еще задачи.
Потом выполняется вторая задача.

В итоге:
console.log("Hello world")
console.log("Hello JS")
console.log("Hello timeout")
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы