javascript - Masalah setTimeout
某草草
某草草 2017-06-14 10:53:57
0
3
571

ujian fungsi() {

  var a = 1;
  setTimeout(function() {
    alert(a);
    a = 5;
  }, 1000);
  a = 19;
setTimeout(function() {
   alert(a);
    a = 4;
  }, 3000);
}
test();
alert(0);

想问一下,为什么最后会弹出5?
某草草
某草草

membalas semua(3)
仅有的幸福

Pertama sekali, adalah disyorkan agar subjek membaca artikel tentang JavaScript
Penjelasan terperinci tentang mekanisme operasi JavaScript Event Loop

Artikel ini menerangkan secara terperinci prinsip pengundian acara JavaScript

Mari kita bercakap tentang soalan topik:

1. Utas utama akan dilaksanakan terlebih dahulu Apabila test() dilaksanakan, dua setTimeout akan dimasukkan ke dalam baris gilir tugasan, dan kemudian amaran(0) akan dilaksanakan, jadi 0 akan dikeluarkan pada masa ini masa, nilai a ialah 19, kerana setTimeout Ia belum dilaksanakan lagi, tiada peluang tugasan lain untuk a;

2 Selepas utas utama dilaksanakan, ia kemudian meninjau baris gilir tugasan untuk melaksanakan tugasan yang dijadualkan Memandangkan masa tamat masa set pertama adalah lebih pendek daripada yang kedua, panggilan balik setTimeout pertama dilaksanakan terlebih dahulu. akan dikeluarkan selepas kira-kira 1s Satu langkah 19, kemudian a diberikan nilai 5;

3 Kemudian laksanakan setTimeout kedua Kerana kedua-dua setTimeout dimasukkan ke dalam baris gilir pada masa yang sama, panggilan balik setTimeout kedua akan dilaksanakan kira-kira 2s kemudian. dan kemudian akan menjadi Nilai yang ditetapkan ialah 4. Sebab mengapa ia lebih kurang 2s adalah kerana pemasa Javascript tidak tepat

三叔

Nyahpepijat anda sendiri akan membantu anda memahami mekanisme dengan lebih teliti

漂亮男人

Selepas pemasa pertama dilaksanakan, a global telah menjadi 5
Perubahan a dalam fungsi ujian: 1-19-5-makluman terakhir(a)-4

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan