Sobes.tech
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.