//1 setTimeout(() => { console.log('hi'); }, 5000) //2 setTimeout(() => { console.log('hello'); }, 3000) //3 setTimeout(() => { console.log('bye'); }, 0) //4 setTimeout(() => { console.time('the code took:'); let i = 10000 while (i--) { console.log(i); } console.timeEnd('the code took:') }, 7000)
Di sini saya menulis empat fungsi setTimeout Mengikut pemahaman saya, ia akan mula melaksanakan pada masa yang sama dalam baris gilir panggilan balik, bukan? Jika saya betul, maka soalan saya ialah sama ada fungsi setTimeout() keempat telah menyelesaikan separuh atau lebih separuh daripada pelaksanaannya dalam baris gilir panggil balik atau adakah ia bermula dari awal selepas 7 saat selepas ditolak ke dalam pelaksanaan timbunan panggilan? Jadi apa yang berlaku di sebalik tabir?
Fungsi ini tidak akan berjalan secara selari atau serentak dalam baris gilir panggil balik. Ia dijadualkan secara individu dan tidak segerak. Susunan pelaksanaan bergantung pada kependaman yang ditentukan bagi setiap fungsi. Untuk setiap fungsi setTimeout, panggilan balik dijadualkan untuk dilaksanakan selepas kelewatan yang ditentukan.
Urutan pelaksanaan adalah seperti berikut:
Walau bagaimanapun, fungsi setTimeout keempat tidak semestinya berjalan bersama-sama dengan fungsi setTimeout yang lain, dan ia juga tidak dijamin untuk dilaksanakan sendiri. Tertib pelaksanaan ditentukan oleh baris gilir panggil balik, gelung acara mendapat tugas daripada baris gilir panggil balik dan menjalankannya dalam tindanan panggilan hanya apabila tindanan panggilan kosong. Oleh itu, fungsi setTimeout keempat hanya akan mula dilaksanakan apabila tiada tugas lain dalam timbunan panggilan. Selepas menjalankan kod yang diberikan, output sepatutnya muncul dalam susunan berikut:
Berikut ialah urutan keluaran: