Cara cepat memulai VUE3.0:
Saya sedikit bingung saat mulai mempelajari soal tes tertulis beberapa waktu lalu. Hari ini kita akan menganalisis secara menyeluruh mekanisme eksekusi acara JS.
, Sobat bisa mencoba menuliskan urutan pencetakannya.
JSJS
digunakan sebagai bahasa skrip browser. Tujuan utama Js
adalah untuk mengoperasikan DOM, yang menentukan bahwa JS
harus berutas tunggal. Jika JS
multi-utas seperti Java, dan jika dua utas beroperasi DOM pada saat yang sama, maka browser harus Bagaimana cara mengimplementasikannya?
Peluncuran JS
sebenarnya untuk memanfaatkan popularitas Java. Bahasa ini ditulis belum lama ini, jadi inilah mengapa JS adalah
Karena JS adalah single-thread, tugas harus diurutkan. Semua tugas akan dijalankan sesuai aturan.
Tugas sinkron
Tugas asinkron
Tugas sinkron dan tugas asinkron memasuki tumpukan eksekusi. JS pertama-tama akan menentukan bahwa jenis tugas
adalah tugas sinkron. Jika memasuki thread utama secara langsung,
itu adalah tugas asinkron. Masuk ke Event Table
dan daftarkan fungsi panggilan balik Event Queue
Setelah
semua tugas sinkron dijalankan, JS akan memasuki Event Queue
. Fungsi membaca
menjalankan proses ini berulang kali hingga semua tugas selesai. Ini adalah bagaimana kita sering mengatakan bahwa事件循环
emmmmm, saya tidak tahu. . . . JS harus memiliki logika uniknya sendiri untuk menentukan apakah tumpukan eksekusi kosong.
Urutan eksekusi tugas asinkron adalah: Tugas makro -> Tugas mikro
Tugas asinkron dapat dibagi menjadi
tugas makro
Tugas mikro
I/0
setTimeout
setInterval
Janji
.lalu
.catch
vite Sebuah plug-in yang dikonfigurasi sebelumnya, ada beberapa masalah dengan versinya, harap abaikan alarm merah ini.
开始了
dengan tugas sinkron. Pertama-tama memasuki tumpukan eksekusi
untuk menjalankan fungsi task()
a
adalah tugas sinkron. Memasuki tumpukan eksekusi
async/menunggu adalah proses asinkron ke sinkron dieksekusi secara sinkron. Kode berikut akan menjadi asinkron. b
memasuki tumpukan eksekusi sebagai tugas sinkron,
a end
menjadi tugas mikro dari tugas asinkron, dan memasuki tumpukan eksekusi
sejauh ini, antrian tugas sinkron telah开始了
, a
, b
Sejauh ini, antrian tugas asinkron telah memulai makro tugas: setTimeout
: a end
Jadi inilah pertanyaannya, bukankah itu berarti tugas makro akan dieksekusi lebih awal daripada tugas mikro? Mengapa setTimeout
dicetak setelah a end
?
看这张图
setTimeout memasuki antrian tugas sebagai tugas makro. Jadi alasannya
secara umum:
async menunggu mengarah pada pembuatan tugas mikro, tetapi tugas mikro ini termasuk dalam tugas makro saat ini. Oleh karena itu, a end
akan dieksekusi terlebih dahulu, dan setelah eksekusi, tugas makro saat ini akan dinilai telah berakhir. Jalankan tugas makro berikutnya, cetak setTimeout
c
Karena konversi Promise, ini menjadi tugas sinkron dan memasuki antrian tugas.c
c end
memasuki antrian tugas sebagai tugas mikro yang berasal dari
d
antrian tugas sebagai tugas sinkron.
a
b
c
d
a end microtask
c end microtask
setTimeout macrotask
sehingga urutan pencetakannya adalah sebagai berikut.
Pemahaman saya tentang mekanisme eksekusi JS mungkin agak salah, dan saya harap kalian bisa menunjukkannya.
[Tutorial video terkait yang direkomendasikan: web front-end]
Di atas adalah analisis mendalam tentang detail mekanisme eksekusi acara di JS. Untuk informasi lebih lanjut, harap perhatikan artikel terkait lainnya di situs web PHP Cina!