Rumah  >  Soal Jawab  >  teks badan

Sila lihat empat fungsi setTimeout ini dan bahagian pelaksanaannya

//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?

P粉304704653P粉304704653398 hari yang lalu553

membalas semua(1)saya akan balas

  • P粉709307865

    P粉7093078652023-09-18 13:33:27

    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:

    第三个setTimeout(0毫秒延迟)
    第二个setTimeout(3000毫秒延迟)
    第一个setTimeout(5000毫秒延迟)
    第四个setTimeout(7000毫秒延迟)

    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:

    1. bye
    2. hello
    3. hi
    4. 从10000打印到0(降序)
    5. 代码执行时间为...毫秒

    balas
    0
  • Batalbalas