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