Sobes.tech
Junior

JavaScript-də setTimeout funksiyası necə işləyir?

sobes.tech Süni İntellekt

AI-dan cavab

setTimeout müəyyən edilmiş millisekund sayından sonra bir funksiya və ya kod parçasının icrasını planlaşdırır.

setTimeout çağırıldıqda, brauzer (və ya Node.js icra mühiti) bir zamanlayıcı yaradır. setTimeout-a verilmiş funksiya, göstərilən gecikmə vaxtı keçdikdən sonra callback növbəsinə (task queue) yerləşdirilir.

JavaScript tək ipliklidir. Əsas icra ipi (main thread) kodu ardıcıllıqla icra edir. Əsas iplik cari tapşırıqları tamamladıqda, callback növbəsini yoxlayır. Əgər növbədə funksiyalar (məsələn, setTimeout ilə gecikdirilmiş olanlar) varsa və əsas iplik boşdursa, ilk funksiyanı çıxarır və icra edir.

Bu, setTimeout(fn, 0)-ın fn-in dərhal icrasını təmin etmədiyi anlamına gəlir. O, mümkün qədər tez icra olunacaq, lakin yalnız cari kodun icrası tamamlandıqdan sonra.

Sintaksis:

setTimeout(function, milliseconds, param1, param2, ...);
  • function: İcra olunacaq funksiya.
  • milliseconds: Funksiya icra olunmadan əvvəl keçən millisekundların sayı. Əgər ötürülməzsə, standart olaraq 0 qəbul edilir.
  • param1, param2, ...: Funksiya çağırıldıqda ona ötürüləcək əlavə arqumentlər.

Nümunə:

// "Salam!" 2 saniyə sonra göstərəcək
setTimeout(function() {
  console.log("Salam!");
}, 2000);

// arqumentlərin ötürülməsi
function mesajGoster(ad) {
  console.log("Salam, " + ad + "!");
}

setTimeout(mesajGoster, 1000, "Dünya"); // 1 saniyə sonra "Salam, Dünya!" göstərəcək

setTimeout planlaşdırılmış icranı ləğv etmək üçün istifadə oluna bilən zamanlayıcı ID-si qaytarır.

clearTimeout istifadə nümunəsi:

let timerId = setTimeout(function() {
  console.log("Bu sətir göstərilməyəcək");
}, 3000);

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

// Zamanlayıcıyı ləğv et
clearTimeout(timerId);

console.log("Zamanlayıcı ləğv olundu.");

Əhəmiyyətli nöqtələr:

  • Gecikmə dəqiq təmin edilmir, xüsusən də əsas iplik yüksək yükləndikdə. Göstərilən vaxt, funksiya callback növbəsinə yerləşdirilməzdən əvvəlki minimal gecikmədir.
  • Node.js-də zamanlayıcılar hadisələr döngüsü (event loop) tərəfindən idarə olunur, brauzerə oxşar.