Rumah  >  Artikel  >  hujung hadapan web  >  Analisis mendalam tentang mekanisme pelaksanaan acara dalam JS

Analisis mendalam tentang mekanisme pelaksanaan acara dalam JS

青灯夜游
青灯夜游ke hadapan
2022-03-29 19:49:002097semak imbas

Artikel ini akan memberi anda pemahaman yang mendalam tentang mekanisme pelaksanaan acara dalam JavaScript dengan menganalisis urutan pencetakan sekeping kod saya harap ia akan membantu anda!

Analisis mendalam tentang mekanisme pelaksanaan acara dalam JS

Saya agak keliru tentang soalan ujian bertulis suatu masa dahulu. Hari ini kita akan menganalisis secara menyeluruh mekanisme pelaksanaan acara JS. [Cadangan berkaitan: Tutorial pembelajaran javascript]

Lihat sekeping kod dahulu

Kamu boleh cuba menulis pesanan cetakan

Analisis mendalam tentang mekanisme pelaksanaan acara dalam JS

Berbenang tunggal

JS digunakan terutamanya sebagai bahasa skrip untuk penyemak imbas adalah untuk mengendalikan DOM, yang menentukan Js mesti berbenang tunggal Jika JS berbilang benang seperti Java, jika dua utas mengendalikan DOM pada masa yang sama, bagaimanakah penyemak imbas harus melaksanakannya? Pengeluaran JS

sebenarnya adalah untuk mengambil kesempatan daripada populariti Java Bahasa ini ditulis tidak lama dahulu, jadi inilah sebabnya JS adalah single-threaded JS

JS. Mekanisme pelaksanaan

Memandangkan JS adalah satu benang, tugasan mesti diisih. Semua tugas akan dilaksanakan mengikut peraturan.

  • Tugas segerak

  • Tugas tak segerak

Analisis mendalam tentang mekanisme pelaksanaan acara dalam JS

Segerak tugasan Apabila tugasan dan tugas tak segerak memasuki timbunan pelaksanaan, JS akan terlebih dahulu menentukan jenis tugasan

  • ialah tugasan segerak, dan terus memasuki utas utama

  • ialah Tugas tak segerak, masukkan

    , daftar fungsi panggil balik Event TableEvent Queue

  • Apabila semua tugas penyegerakan dilaksanakan, JS akan membaca fungsi dalam

    dan laksanakan Event Queue

  • Proses ini akan dilaksanakan berulang kali sehingga semua tugasan selesai. Inilah yang sering kita katakan

    事件循环

Bagaimana JS menentukan timbunan pelaksanaan kosong

emmmm, saya tidak tahu. . . . JS harus mempunyai logik uniknya sendiri untuk menentukan sama ada timbunan pelaksanaan kosong.

Tugas tak segerak

Turutan pelaksanaan tugas tak segerak ialah: tugas makro -> tugas mikro

Tugas tak segerak boleh dibahagikan kepada

  • Tugas makro

  • Tugas mikro

Tugas makro biasa

  • I/0

  • setTimeout

  • setInterval

Microtasks biasa

  • Janji

  • .kemudian

  • .tangkap

    >

Jawapan

vite mengkonfigurasi pemalam sebelum ini, terdapat beberapa isu dengan versi, abaikan penggera merah ini

Analisis mendalam tentang mekanisme pelaksanaan acara dalam JS

Analisis

  • ialah tugasan segerak, yang mula-mula memasuki timbunan pelaksanaan 开始了

  • melaksanakan fungsi

    dan task() ialah tugasan Segerak, masukkan timbunan pelaksanaan a

  • async/wait ialah proses tak segerak kepada segerak, baris pertama kod akan dilaksanakan secara serentak, dan kod berikut akan tak segerak.

    Masuk tindanan pelaksanaan sebagai tugas segerakb

  • Menjadi tugas mikro tugas tak segerak dan memasuki tindanan pelaksanaan, a end

Setakat ini, baris gilir tugas segerak ialah , 开始了, ab

Setakat ini, baris gilir tugas tak segerak ialah tugas makro: Mikro Tugasan: setTimeouta end

Jika tiada kod berikutnya, urutan pencetakan adalah seperti berikut

Analisis mendalam tentang mekanisme pelaksanaan acara dalam JS

Kemudian Masalahnya, bukankah tugas makro akan dilaksanakan lebih awal daripada tugas mikro Mengapa

dicetak selepas setTimeout? a end

看这张图

Analisis mendalam tentang mekanisme pelaksanaan acara dalam JS

setTimeout memasuki baris gilir tugasan sebagai tugasan makro. Jadi inilah sebabnya

Dalam istilah orang awam:

async menunggu membawa kepada penjanaan tugas mikro, tetapi tugas mikro ini tergolong dalam tugas makro semasa. Oleh itu,

akan dilaksanakan terlebih dahulu, dan selepas pelaksanaan, ia akan dinilai bahawa tugas makro semasa telah tamat. Laksanakan tugas makro seterusnya dan cetak a endsetTimeout

Teruskan proses

  • Disebabkan penukaran Janji, ia menjadi segerak Tugasan memasuki baris gilir tugas c

  • Memasuki baris gilir tugas sebagai microtask terbitan Janji c end

  • Memasuki tugasan sebagai Baris Tugasan segerakd

Setakat ini, segerakkan baris gilir tugas

  • a

  • b

  • c

  • d

Setakat ini, baris gilir tugas tak segerak

  • tugasan mikro tamat

  • tugas mikro tamatkan

  • tugasan masa tamat

Jadi susunan cetakan adalah seperti berikut

Analisis mendalam tentang mekanisme pelaksanaan acara dalam JS

Postskrip

Pemahaman saya sendiri tentang mekanisme pelaksanaan JS mungkin tidak betul, saya harap anda akan bos menunjukkan.

[Tutorial video berkaitan yang disyorkan: bahagian hadapan web]

Atas ialah kandungan terperinci Analisis mendalam tentang mekanisme pelaksanaan acara dalam JS. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:juejin.cn. Jika ada pelanggaran, sila hubungi admin@php.cn Padam