Sobes.tech
Junior

Kā darbojas setTimeout funkcija JavaScript?

sobes.tech AI

Atbilde no AI

setTimeout plāno funkcijas vai koda fragmenta izpildi pēc norādītā milisekunžu skaita.

Izsaucot setTimeout, pārlūkprogramma (vai Node.js vide) izveido taimeri. Funkcija, nodota setTimeout, tiek ievietota callback rindiņā (task queue) pēc norādītā aizkaves laika.

JavaScript ir viengājis. Galvenais pavedienis (main thread) izpilda kodu secīgi. Kad galvenais pavedienis pabeidz pašreizējos uzdevumus, tas pārbauda callback rindiņu. Ja rindā ir funkcijas (piemēram, tās, kas atliktas ar setTimeout) un galvenais pavedienis ir brīvs, tas ņem pirmo funkciju un izpilda to.

Tas nozīmē, ka setTimeout(fn, 0) negarantē fn tūlītēju izpildi. Tā tiks izpildīta pēc iespējas ātrāk, bet tikai pēc pašreizējā koda izpildes pabeigšanas.

Sintakse:

setTimeout(function, milliseconds, param1, param2, ...);
  • function: Funkcija, kas jāizpilda.
  • milliseconds: Laika ilgums milisekundēs līdz funkcijas izpildei. Ja izlaists, pēc noklusējuma 0.
  • param1, param2, ...: Neobligāti argumenti, kas tiks nodoti funkcijai tās izsaukšanas laikā.

Piemērs:

// Izvadīs "Sveiki!" pēc 2 sekundēm
setTimeout(function() {
  console.log("Sveiki!");
}, 2000);

// Argumentu nodošana
funkcija parādītZiņojumu(vards) {
  console.log("Sveiki, " + vards + "!");
}

setTimeout(parādītZiņojumu, 1000, "Pasaule"); // Izvadīs "Sveiki, Pasaule!" pēc 1 sekundes

setTimeout atgriež skaitlisku taimeri ID, ko var izmantot plānotā izpildes atcelšanai ar clearTimeout.

Piemērs ar clearTimeout:

atliktTimeri = setTimeout(function() {
  console.log("Šis teksts netiks izvadīts");
}, 3000);

console.log("Taimeris sākās...");

// Atcelt taimeri
clearTimeout(atiktiTimeri);

console.log("Taimeris atcelts.");

Svarīgi momenti:

  • Aizkave nav precīza, īpaši pie lielas slodzes. Norādītais laiks ir minimālais, pēc kura funkcija tiks ievietota callback rindā.
  • Node.js taimeri tiek pārvaldīti ar notikumu ciklu (event loop), tāpat kā pārlūkā.