Sobes.tech
Middle

Sıfır gecikme süresiyle setTimeout fonksiyonunun kullanımına özel bir durumdan bahsedin.

sobes.tech yapay zeka

AI'dan gelen yanıt

setTimeout(callback, 0) callback'i makro görev kuyruğuna (makro görev kuyruğu) yerleştirir. callback içindeki kod, mevcut çağrı yığını boş olduktan ve bir sonraki makro görev döngüsü işlendiğinde çalışacaktır.

Ana kullanım senaryoları:

  • Render sonrası gecikmiş yürütme: Tarayıcının DOM'daki mevcut değişiklikleri işlemesinden sonra kodu çalıştırmaya olanak tanır.
    // DOM öğesini değiştir
    element.textContent = 'Yeni metin';
    
    // Güncellenmiş DOM'a bağlı gecikmiş işlem
    setTimeout(() => {
      console.log('DOM güncellendi, yeni durumla çalışmaya hazır');
    }, 0);
    
  • Uzun işlemleri bölme: Ana akışın kilitlenmesini önlemeye yardımcı olur, uzun hesaplamaları daha küçük parçalara ayırır ve bunları mikro görevlerde (makro görevler) yürütür.
    function processLargeData(data) {
      let i = 0;
      function processChunk() {
        const chunkSize = 1000;
        const end = Math.min(i + chunkSize, data.length);
    
        // Verinin bir bölümünü işle
        for (let j = i; j < end; j++) {
          // data[j] ile bir şeyler yap
        }
    
        i = end;
        if (i < data.length) {
          // Sonraki bölümü geciktir
          setTimeout(processChunk, 0);
        } else {
          console.log('İşlem tamamlandı');
        }
      }
      processChunk();
    }
    
  • Ana betikten sonra yürütmeyi devretme: Belirli kodun, mevcut betiğin tam olarak başlatılmasından ve tüm senkron işlemlerin işlendiğinden sonra çalışmasını sağlar.
    console.log('Betik başlangıcı');
    
    setTimeout(() => {
      console.log('Ana betikten sonra çalışır');
    }, 0);
    
    console.log('Betik sonu');
    // Çıktı:
    // Betik başlangıcı
    // Betik sonu
    // Ana betikten sonra çalışır
    

Sıfır gecikmenin anlık yürütmeyi ifade etmediğine dikkat etmek önemlidir. Yürütme süresi, olay döngüsünün yüküne ve kuyruklardaki diğer görevlere (özellikle mikro görevler, makro görevlerden önce) bağlıdır.