Answer

Answer

t.me/js_test

Ответ:

First Third Second

Объяснение:

Мы вызываем функцию setTimeout первой. Тем не менее, она выводится в консоль последней

Это происходит из-за того, что в браузерах у нас есть не только рантайм движок, но и WebAPIWebAPI предоставляет нам функцию setTimeout и много других возможностей. Например, DOM.

После того как коллбек отправлен в WebAPI, функция setTimeout (но не коллбек!) вынимается из стека.

Теперь вызывается foo, и "First" выводится в консоль.

foo достается из стека, и вызывается baz"Third" выводится в консоль.

WebAPI не может добавлять содержимое в стек когда захочет. Вместо этого он отправляет коллбек-функцию в так называемую очередь.

Здесь на сцену выходит цикл событий (event loop). Event loop проверяет стек и очередь задач. Если стек пустой, то он берет первый элемент из очереди и отправляет его в стек.

Вызывается bar, в консоль выводится "Second" и эта функция достается из стека.

Код для проверки:

const foo = () => console.log("First");
const bar = () => setTimeout(() => console.log("Second"));
const baz = () => console.log("Third");

bar();
foo();
baz();

Report Page