Sobes.tech
Junior

JavaScript'te setTimeout fonksiyonu nasıl çalışır?

sobes.tech yapay zeka

AI'dan gelen yanıt

setTimeout belirli bir milisaniye sayısı sonra bir fonksiyon veya kod parçasının yürütülmesini planlar.

setTimeout çağrıldığında, tarayıcı (veya Node.js çalışma ortamı) bir zamanlayıcı oluşturur. setTimeout'a geçirilen fonksiyon, belirtilen gecikme süresi sonunda görev kuyruğuna (task queue) eklenir.

JavaScript tek iş parçacıklıdır. Ana yürütme akışı (main thread) kodu sıralı olarak yürütür. Ana iş parçacığı mevcut görevleri tamamladığında, görev kuyruğunu kontrol eder. Kuyrukta fonksiyonlar (örneğin, setTimeout ile ertelenmiş olanlar) varsa ve ana iş parçacığı boşsa, ilk fonksiyon kuyruktan alınır ve yürütülür.

Bu, setTimeout(fn, 0)'ın fn'in anında yürütülmesini garanti etmediği anlamına gelir. En kısa sürede yürütülecektir, ancak yalnızca mevcut kod yürütmesi tamamlandıktan sonra.

Sözdizimi:

setTimeout(function, milliseconds, param1, param2, ...);
  • function: Yürütülecek fonksiyon.
  • milliseconds: Fonksiyonun yürütülmesinden önceki milisaniye sayısı. Atlanırsa varsayılan 0 olur.
  • param1, param2, ...: Fonksiyon çağrılırken iletilecek isteğe bağlı argümanlar.

Örnek:

// "Merhaba!" 2 saniye sonra gösterir
setTimeout(function() {
  console.log("Merhaba!");
}, 2000);

// Argümanlar ile
function mesajGoster(isim) {
  console.log("Merhaba, " + isim + "!");
}

setTimeout(mesajGoster, 1000, "Dünya"); // 1 saniye sonra "Merhaba, Dünya!" gösterir

setTimeout fonksiyonu, planlanan yürütmeyi iptal etmek için kullanılabilen sayısal bir zamanlayıcı ID'si döner.

clearTimeout kullanımı örneği:

let timerId = setTimeout(function() {
  console.log("Bu satır gösterilmeyecek");
}, 3000);

console.log("Zamanlayıcı başlatıldı...");

// Zamanlayıcıyı iptal et
clearTimeout(timerId);

console.log("Zamanlayıcı iptal edildi.");

Önemli noktalar:

  • Gecikme tam olarak garanti edilmez, özellikle ana iş parçacığı yüksek yük altındaysa. Belirtilen zaman, fonksiyonun görev kuyruğuna konulması için minimum gecikmedir.
  • Node.js'te zamanlayıcılar, tarayıcıyla benzer şekilde olay döngüsü (event loop) tarafından yönetilir.