Artikel ini memberi anda pengetahuan yang berkaitan tentang javascript terutamanya memperkenalkan tugasan segerak gelung peristiwa JavaScript dan tugasan tak segerak boleh merujuknya.
[Cadangan berkaitan: tutorial video javascript, bahagian hadapan web]
Pertama sekali, sebelum mempelajari tentang penyegerakan dan isu tak segerak dalam js, anda perlu memahami bahawa js adalah satu-benang Mengapakah ia perlu satu-benang? Ini bergantung pada senario penggunaannya Ia digunakan terutamanya untuk membolehkan pengguna berinteraksi dengan halaman. Jadi dengan mengandaikan bahawa js adalah berbilang benang, dalam urutan ini, pengguna mengklik butang dan nod DOM ditambah Dalam urutan lain, pengguna mengklik butang dan memadamkan nod DOM Kemudian js tidak tahu apa yang hendak didengar kali ini. Jadi apakah sebab kemunculan segerak dan tak segerak? Dengan mengandaikan tiada asynchronous, maka apabila kita meminta data dari pelayan, ia mungkin tersekat untuk masa yang lama kerana rangkaian yang lemah Pada masa ini, kerana ia segerak, halaman web mesti menunggu permintaan data kembali sebelum ini ia boleh terus berinteraksi dengan pengguna Ini akan menyebabkan seluruh halaman web menjadi sangat sibuk.
Mari kita tidak bercakap tentang timbunan pelaksanaan, tetapi mari kita bercakap tentang timbunan itu. Timbunan itu seperti baldi Perkara pertama yang dimasukkan mestilah perkara terakhir yang dikeluarkan, iaitu perkara yang selalu dipanggil oleh semua orang dahulu, terakhir keluar.
Kemudian timbunan pelaksanaan adalah untuk menukar blok kandungan dalam gambar menjadi tugasan kod. Ia pasti tidak jelas hanya dengan bercakap tentang itu. Anda masih perlu mengekodnya :
function fn (count) { if (count <= 0) return fn(count - 1) console.log(count) } fn(3)
Ini adalah kod rekursif yang sangat mudah Di sini kami menerangkannya secara langsung dalam gambar (sebenarnya lukisan di sini tidak ketat, bahagian bawah tindanan hendaklah konteks pelaksanaan global):
Semua tugas dalam js akan dilaksanakan pada urutan utama dan membentuk tindanan pelaksanaan. (Sila ingat ini!!!)
Kemudian baris gilir dan tindanan adalah bertentangan, baris gilir adalah yang pertama masuk dahulu. Malah, ianya mudah difahami, sama seperti biasa kita beratur. Kemudian pemahaman popular tentang baris gilir tugas ialah digunakan untuk meletakkan fungsi panggil balik tugas tak segerak. (Sila ingat ini juga!!!)
Mula-mula beberapa perkara konsep untuk meletakkan asas:
Ramai orang keliru dengan semantiknya apabila memahami tugas penyegerakan Malah, tugas penyegerakan tidak dilaksanakan secara serentak. Ia adalah untuk menunggu tugas pelaksanaan sebelumnya tamat sebelum melaksanakan tugas seterusnya Tidak sukar untuk difahami di sini, tetapi mari kita tulis kod mudah untuk menerangkan:
console.log(1) console.log(2) console.log(3)
Kod itu sangat mudah, betul. ? Jelas sekali hasil keluaran ialah 1, 2, 3 Ini ialah kod penyegerakan. timbunan pelaksanaan adalah batal.
Mari kita berikan contoh secara langsung:
console.log(1) setTimeout(() => { console.log(2) }, 1000) console.log(3)
Output kod ini berbeza daripada output kod segerak di atas . Perintah keluaran ialah 1, 3, 2 Ini adalah kod tak segerak. perkataan:
Tugas tak segerak merujuk kepada tugasan yang tidak memasuki utas utama tetapi memasuki "baris gilir tugas" (Baris gilir acara Hanya apabila "baris gilir tugas" memberitahu urutan utama bahawa tugas tak segerak boleh dilaksanakan. masukkan urutan utama untuk pelaksanaan. Tidak mengapa jika anda tidak memahaminya. Ia akan menjadi pencerahan apabila kita bercakap tentang gelung acara nanti. Mekanisme pelaksanaan JS
js一直从任务队列中取回调函数,然后放入主线程中执行,这是一个循环不断的过程,所以把它叫做事件循环。
这个还是要简单粗暴的来段代码会更直观一点:
const promise = new Promise((resolve, reject) => { console.log(1); setTimeout(() => { console.log("timerStart"); resolve("success"); console.log("timerEnd"); }, 0); console.log(2); }); promise.then((res) => { console.log(res); }); console.log(4);
现在我们根据上面的规则一步一步分析这段代码,如果不懂Promise也没有关系,我保证这并不影响你对事件循环的理解。现在你就把自己当成js代码的检察官,要正确把它们放在合适的“位置”
【相关推荐:javascript视频教程、web前端】
Atas ialah kandungan terperinci Tugasan segerak gelung peristiwa JavaScript dan tugas tak segerak. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!