Middle
setTimeout funksiyasının sıfır gecikmə ilə istifadəsinin xüsusi halı haqqında danışın.
sobes.tech Süni İntellekt
AI-dan cavab
setTimeout(callback, 0) callback-i makro vəzifə (makro vəzifə növbəsi) sırasına yerləşdirir. callback daxilindəki kod cari çağrı yığınının boş olması və növbəti makro vəzifə dövrünün işlənməsi ilə icra olunacaq.
Əsas istifadə ssenariləri:
- Renderdən sonra gecikdirilmiş icra: Brauzerin cari dəyişiklikləri DOM-da işləyib bitirdikdən sonra kodu icra etməyə imkan verir.
// DOM elementini dəyişmək element.textContent = 'Yeni mətn'; // Yenilənmiş DOM-a bağlı gecikdirilmiş fəaliyyət setTimeout(() => { console.log('DOM yeniləndi, yeni vəziyyətlə işləmək olar'); }, 0); - Uzun əməliyyatların bölünməsi: Əsas axını bloklamamaq üçün kömək edir, uzun hesablamaları kiçik hissələrə bölür və mikro vəzifələrdə (makro vəzifələrdə) icra edir.
function processLargeData(data) { let i = 0; function processChunk() { const chunkSize = 1000; const end = Math.min(i + chunkSize, data.length); // Məlumatın bir hissəsini işləmək for (let j = i; j < end; j++) { // data[j] ilə nəsə etmək } i = end; if (i < data.length) { // Növbəti hissəni gecikdir setTimeout(processChunk, 0); } else { console.log('İşlem tamamlandı'); } } processChunk(); } - Əsas skriptin icrasından sonra icranı ötürmək: Müəyyən kodun cari skript tam işlədildikdən və bütün sinxron əməliyyatlar işlənəndən sonra icra olunmasını təmin edir.
console.log('Skript başlanğıcı'); setTimeout(() => { console.log('Əsas skriptdən sonra icra olunur'); }, 0); console.log('Skript sonu'); // Nəticə: // Skript başlanğıcı // Skript sonu // Əsas skriptdən sonra icra olunur
Qeyd etmək lazımdır ki, sıfır gecikmə dərhal icra anlamına gəlmir. İcra vaxtı event loop-un yüklənməsindən və növbələrdəki digər vəzifələrdən (xüsusən mikro vəzifələr makro vəzifələrdən əvvəl) asılıdır.