Почему обратный вызов SetTimeout не работает сразу после того, как стек вызовов пуст в JavaScript?Javascript

Форум по Javascript
Ответить
Anonymous
 Почему обратный вызов SetTimeout не работает сразу после того, как стек вызовов пуст в JavaScript?

Сообщение Anonymous »

const example0 = () => {
setTimeout(() => {
console.log("example 0");
}, 0);
};

const example1 = () => {
setTimeout(() => {
console.log("example 1");
}, 0);
for (let i = 0; i < 10; i++) {
console.log(i);
}
example2();
};

const example2 = () => {
console.log("example 2");
example3();
};

const example3 = () => {
console.log("example 3");
};

example0();
example1();

Разве этот код не должен работать так?: Вызывается функция example1. Функция example1 находится в стеке вызовов. Когда он встречает setTimeout, он передается в веб-API setTimeout, и таймер запускается. Поскольку таймер установлен на 0 мс, обратный вызов немедленно попадает в очередь обратного вызова, ожидая, пока стек вызовов не опустеет. После завершения функции example1 стек вызовов пуст. Когда стек вызовов пуст, он должен выполнить обратный вызов setTimeout перед запуском оставшегося кода примера 1. Однако результат не такой. После выполнения всех вложенных функций внутри example0 и example1 запускается обратный вызов setTimeout. Почему это? На самом деле, разве стек вызовов не пуст после завершения example0?
output
0
1
2
3
4
5
6
7
8
9
example 2
example 3
example 0
example 1

Expected Output
example 0
0
1
2
3
4
5
6
7
8
9
example 2
example 3
example 1


Подробнее здесь: https://stackoverflow.com/questions/793 ... ck-is-empt
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»