2016-08-01 4 views
1

В чтении о цикле событий JS мне было любопытно, где выполняется веб-api. Например, в этом image розовая коробка не имеет имени (просто говорит «конкретная реализация»), оставляя меня удивляться , где эти веб-приложения api выполняются. Стек вызовов, цикл событий, очередь сообщений имеют имена. Я также видел Philip Roberts talk о цикле событий, и он просто ссылается на него как на «Web API».Цикл событий Javascript: где выполняется веб-api?

Поэтому, когда веб-api достигается в стеке вызовов, он отключается и запускается, пока остальная часть стека вызовов запускается. Но где же этот веб-ави-вызов будет выполнен? Например, если установленное время из 5 секунд, где он сидит за эти 5 секунд?

+0

Я не уверен, что вы подразумеваете под «Web API», но это точно так: какой-то собственный код делает то, что он должен делать. В примере связанного изображения это движок рендеринга DOM браузеров. В случае вызова setTimeout это всего лишь очередь тайм-аутов, сидящих где-то в памяти, и управляется собственным кодом в соответствии с реализацией. – Bergi

+0

@Bergi Хорошо, скажем, что следующий элемент в стеке вызовов, который вызывается, называется 'setTimeout' с 5 секундами. Стек вызова не будет ждать 5 секунд, а затем продолжит работу с остальной частью стека. 'setTimeOut' отключается и запускается где-то в другом месте, а остальная часть стека вызовов продолжается. Но * где * и * как '' setTimeout' выполняется, мне непонятно, что я пытался исследовать. – AlanH

+0

На самом деле, он не отключается и выполняется где-то в другом месте, он просто возвращает обратный вызов в очередь таймера, а затем возвращается. Но да, он может продолжаться в фоновом потоке и ждать там пять секунд, иначе он может быть реализован любым другим способом. Это не имеет значения. Это работа двигателя/браузера. Важно то, что через пять секунд обратный вызов помещается в очередь сообщений, которая должна быть выполнена. – Bergi

ответ

0

Когда кто-то нажимает на ссылку, событие «changeColor» добавляется в очередь сообщений.

Если очередь сообщений пуста, она будет выполнена на следующем тике. Если в очереди есть другие события, они будут выполняться сначала до выполнения «changeColor».

+0

Да, это видно из взгляда на изображение, которое я связал. Пожалуйста, см. Мой ответ на комментарий Берги для clarificaiton. – AlanH

+0

Берги выше правильно. Функция обратного вызова в setTimeout будет добавлена ​​в очередь событий через 5 секунд в вашем сценарии выше. – user2263572

 Смежные вопросы

  • Нет связанных вопросов^_^