Cómo comenzar rápidamente con VUE3.0:
Estaba un poco confundido cuando comencé a estudiar una pregunta de prueba escrita hace algún tiempo. Hoy analizaremos en profundidad el mecanismo de ejecución de eventos de JS.
. Amigos, pueden intentar escribir el orden de impresión.
JSJS
utiliza principalmente como lenguaje de secuencias de comandos del navegador. El objetivo principal de Js
es operar el DOM, lo que determina que JS
debe ser de un solo subproceso si JS
es de subprocesos múltiples como Java y si operan dos subprocesos. el DOM al mismo tiempo, entonces el navegador debería ¿Cómo implementarlo?
El lanzamiento de JS
es en realidad para aprovechar la popularidad de Java. El lenguaje se escribió no hace mucho, por eso JS es
Dado que JS es de un solo subproceso, las tareas deben ordenarse. Todas las tareas se ejecutarán según una regla.
Tareas sincrónicas
Tareas asincrónicas
Las tareas sincrónicas y las tareas asincrónicas ingresan a la pila de ejecución. JS primero determinará que el tipo de tarea
es una tarea sincrónica. Si ingresa directamente al hilo principal,
es una tarea asincrónica. Ingrese Event Table
y registre la función Event Queue
de llamada. Después
de ejecutar todas las tareas sincrónicas, JS ingresará Event Queue
. La función de lectura
ejecuta este proceso repetidamente hasta que se completen todas las tareas. Así es como solemos decir que事件循环
emmmmm, no lo sé. . . . JS debe tener su propia lógica única para determinar si la pila de ejecución está vacía.
La secuencia de ejecución de tareas asincrónicas es: Tareas macro -> Micro tareas
Las tareas asincrónicas se pueden dividir en
tareas macro
Micro tareas
I/0
setTimeout
setInterval
Promise
.then
.catch
vite Un complemento configurado antes, Hay algún problema con la versión, ignore esta alarma roja.
开始了
con una tarea sincrónica. Primero ingresa a la pila de ejecución
para ejecutar task()
. a
es una tarea sincrónica. Ingresar a la pila de ejecución
async/await es el proceso de asincrónico a sincrónico. ejecutado de forma sincrónica. Lo siguiente El código será asincrónico. b
ingresa a la pila de ejecución como una tarea sincrónica,
a end
se convierte en la microtarea de la tarea asincrónica y ingresa a la pila de ejecución
hasta ahora, la cola de tareas sincrónicas ha开始了
, a
, b
hasta ahora, la cola de tareas asincrónicas ha iniciado la macro. tareas: setTimeout
Microtask: a end
Entonces aquí viene la pregunta: ¿no significa que las tareas macro se ejecutarán antes que las micro tareas? ¿Por qué se imprime setTimeout
después de a end
?
看这张图
setTimeout ingresa a la cola de tareas como una tarea macro. Entonces, la razón de esto
es en términos generales:
la espera asíncrona generará microtareas, pero esta microtarea pertenece a la macrotarea actual. Por lo tanto, primero se ejecutará a end
y, después de la ejecución, se juzgará que la macrotarea actual ha finalizado. Ejecute la siguiente tarea macro, imprima setTimeout
c
Debido a la conversión de Promise, se convierte en una tarea sincrónica y ingresa a la cola de tareas
c end
ingresa a la cola de tareas como una microtarea derivada de Promise
d
ingresa a la
La cola de tareas como una tarea sincrónica
a
b
c
d
a finaliza la microtarea
c finaliza la microtarea
setTimeout macrotask,
por lo que el orden de impresión es el siguiente.
Mi comprensión del mecanismo de ejecución de JS puede ser algo incorrecta y espero que puedan señalarlo.
[Tutoriales de vídeo relacionados recomendados: front-end web]
Lo anterior es un análisis en profundidad de los detalles del mecanismo de ejecución de eventos en JS. Para obtener más información, preste atención a otros artículos relacionados en el sitio web chino de PHP.