Jaký výstup vydá tento kód?
důležitost: 5
console.log(1);
setTimeout(() => console.log(2));
Promise.resolve().then(() => console.log(3));
Promise.resolve().then(() => setTimeout(() => console.log(4)));
Promise.resolve().then(() => console.log(5));
setTimeout(() => console.log(6));
console.log(7);
Výstup na konzoli bude: 1 7 3 5 2 6 4.
Tato úloha je pomÄrnÄ jednoduchá. StaÄà jen vÄdÄt, jak fungujà fronty mikroúloh a makroúloh.
PodÃvejme se krok za krokem, co se dÄje.
console.log(1);
// Prvnà Åádek se spustà okamžitÄ a vypÃÅ¡e `1`.
// Fronta makroúloh i fronta mikroúloh jsou zatÃm prázdné.
setTimeout(() => console.log(2));
// `setTimeout` pÅidá callback do fronty makroúloh.
// - obsah fronty makroúloh:
// `console.log(2)`
Promise.resolve().then(() => console.log(3));
// Callback se pÅidá do fronty mikroúloh.
// - obsah fronty mikroúloh:
// `console.log(3)`
Promise.resolve().then(() => setTimeout(() => console.log(4)));
// Callback se `setTimeout(...4)` se pÅidá do fronty mikroúloh.
// - obsah fronty mikroúloh:
// `console.log(3); setTimeout(...4)`
Promise.resolve().then(() => console.log(5));
// Callback se pÅidá do fronty mikroúloh.
// - obsah fronty mikroúloh:
// `console.log(3); setTimeout(...4); console.log(5)`
setTimeout(() => console.log(6));
// `setTimeout` pÅidá callback do fronty makroúloh.
// - obsah fronty makroúloh:
// `console.log(2); console.log(6)`
console.log(7);
// OkamžitÄ vypÃÅ¡e 7.
Když to shrneme:
- ÄÃsla
1a7se zobrazà okamžitÄ, neboÅ¥ jednoduchá volánÃconsole.lognepoužÃvajà žádnou frontu. - Pak po dokonÄenà bÄhu hlavnÃho kódu se spustà fronta mikroúloh.
- Obsahuje tyto pÅÃkazy:
console.log(3); setTimeout(...4); console.log(5). - Zobrazà se ÄÃsla
3a5, zatÃmcosetTimeout(() => console.log(4))pÅidá volánÃconsole.log(4)na konec fronty makroúloh. - Fronta makroúloh je nynÃ:
console.log(2); console.log(6); console.log(4).
- Obsahuje tyto pÅÃkazy:
- Po vyprázdnÄnà fronty mikroúloh se spustà fronta makroúloh a vypÃÅ¡e
2,6,4.
Nakonec tedy máme výstup: 1 7 3 5 2 6 4.