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
Почему обратный вызов SetTimeout не работает сразу после того, как стек вызовов пуст в JavaScript? ⇐ Javascript
Форум по Javascript
1737986946
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
Подробнее здесь: [url]https://stackoverflow.com/questions/79391080/why-doesnt-the-settimeout-callback-run-immediately-after-the-call-stack-is-empt[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия