Sobes.tech
Junior

Kaip veikia setTimeout funkcija JavaScript?

sobes.tech AI

Atsakymas iš AI

setTimeout planuoja funkcijos arba kodo fragmento vykdymą po nurodyto milisekundų skaičiaus.

Kviečiant setTimeout, naršyklė (arba Node.js vykdymo aplinka) sukuria laikmatį. Funkcija, perduota setTimeout, įdedama į callback eilę (task queue) po nurodyto vėlavimo laiko.

JavaScript yra viengijis. Pagrindinis srautas (main thread) vykdo kodą nuosekliai. Kai pagrindinis srautas baigia vykdyti esamus užduotis, jis tikrina callback eilę. Jei eilėje yra funkcijų (pavyzdžiui, tų, kurios buvo atidėtos naudojant setTimeout) ir pagrindinis srautas yra laisvas, jis paima pirmą funkciją ir vykdo ją.

Tai reiškia, kad setTimeout(fn, 0) negarantuoja fn vykdymo iš karto. Ji bus vykdoma kuo greičiau, bet tik po dabartinio kodo vykdymo pabaigos.

Sintaksė:

setTimeout(function, milliseconds, param1, param2, ...);
  • function: Funkcija, kuri turi būti vykdoma.
  • milliseconds: Laiko trukmė milisekundėmis iki funkcijos vykdymo. Jei praleista, numatyta 0.
  • param1, param2, ...: Neprivalomi argumentai, kurie bus perduoti funkcijai jos iškvietimo metu.

Pavyzdys:

// Išves "Labas!" po 2 sekundžių
setTimeout(function() {
  console.log("Labas!");
}, 2000);

// Argumentų perdavimas
function parodytiPranešimą(vardas) {
  console.log("Labas, " + vardas + "!");
}

setTimeout(parodytiPranešimą, 1000, "Pasauli"); // Išves "Labas, Pasauli" po 1 sekundės

setTimeout grąžina skaitmeninį laikmačio ID, kurį galima naudoti atšaukti suplanuotą vykdymą su clearTimeout.

Pavyzdys naudojant clearTimeout:

let timerId = setTimeout(function() {
  console.log("Šis tekstas nebus išvestas");
}, 3000);

console.log("Laikmatis pradėtas...");

// Atšaukti laikmatį
clearTimeout(timerId);

console.log("Laikmatis atšauktas.");

Svarbūs momentai:

  • Vėlavimas nėra tikslus, ypač esant didelėms apkrovoms. Nurodytas laikas yra minimalus, po kurio funkcija bus įdėta į callback eilę.
  • Node.js laikmačiai valdomi įvykių ciklo (event loop), kaip ir naršyklėje.