Middle
Pověz o zvláštním případě použití funkce setTimeout s nulovou prodlevou.
sobes.tech AI
Odpověď od AI
setTimeout(callback, 0) umístí callback do fronty makro úkolů (fronta makro úkolů). Kód uvnitř callback bude proveden poté, co bude prázdný aktuální zásobník volání a bude zpracován následující cyklus událostí makro úkolů.
Hlavní scénáře použití:
- Zpožděné provedení po renderování: Umožňuje spustit kód poté, co prohlížeč zpracuje aktuální změny v DOM.
// Změna prvku DOM element.textContent = 'Nový text'; // Zpožděná akce závislá na aktualizovaném DOM setTimeout(() => { console.log('DOM aktualizován, lze pracovat s novým stavem'); }, 0); - Rozdělení dlouhých operací: Pomáhá zabránit zablokování hlavního vlákna, rozdělením dlouhých výpočtů na menší části, prováděné v mikroúkolech (makro úkolech).
function processLargeData(data) { let i = 0; function processChunk() { const chunkSize = 1000; const end = Math.min(i + chunkSize, data.length); // Zpracování části dat for (let j = i; j < end; j++) { // Něco s data[j] } i = end; if (i < data.length) { // Odložit další část setTimeout(processChunk, 0); } else { console.log('Zpracování dokončeno'); } } processChunk(); } - Předání provádění po hlavním skriptu: Zajišťuje, že určitý kód bude proveden po úplné inicializaci aktuálního skriptu a zpracování všech synchronních operací.
console.log('Začátek skriptu'); setTimeout(() => { console.log('Provádí se po hlavním skriptu'); }, 0); console.log('Konec skriptu'); // Výstup: // Začátek skriptu // Konec skriptu // Provádí se po hlavním skriptu
Je důležité si uvědomit, že nulové zpoždění neznamená okamžité provedení. Čas provedení závisí na zatížení event loopu a dalších úkolech ve frontách (zejména mikroúkolech před makroúkoly).