setTimeout bukan sebahagian daripada teras JavaScript. Ya, anda dengar betul. Ia adalah sebahagian daripada API web yang disediakan oleh penyemak imbas (dalam persekitaran web) atau API Node.js dalam persekitaran sebelah pelayan.
Seperti yang kita sedia maklum, kaedah setTimeout mengambil fungsi CB sebagai parameter. Parameter lain ialah masa dalam ms selepas itu CB mesti dilaksanakan.
Tetapi tunggu, setTimeout tidak perlu dilaksanakan sentiasa pada param masa tertentu. Jika timbunan panggilan kami atau katakan utas utama disekat oleh mana-mana sekeping kod maka setTimeout segera dilaksanakan dalam timbunan panggilan selepas kod sekatan selesai. Sehingga itu, ia kekal disimpan dalam baris gilir Panggilan Balik Penyemak Imbas atau Giliran Tugas.
console.log("HELLO"); setTimeout(() => console.log("Timeout executed"), 5000); //should be execute after 5sec let start = new Date().getTime(); let end= start; while (end < start + 10000){ end= new Date.getTime(); } //This loop will block the main thread for 10sec console.log("Time Expire"); //output--- //HELLO //Time Expire //Timeout executed (Immediately just after Time expire)
Terdapat satu kes juga, bagaimana jika kami menyediakan masa 0ms dalam setTimeout. Adakah ia dilaksanakan mengikut urutan seperti pelaksanaan kod biasa.
Jawapannya adalah tidak kerana setTimeout pertama kali pergi ke baris gilir CB tidak seperti fungsi lain yang dilaksanakan serta-merta dahulu dalam timbunan panggilan.
Atas ialah kandungan terperinci setTimeout() mengambil lebih banyak masa daripada masa yang diberikan dalam param. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!