Comment démarrer rapidement avec VUE3.0 :
J'étais un peu confus lorsque j'ai commencé à étudier une question de test écrit il y a quelque temps. Aujourd'hui, nous allons analyser en profondeur le mécanisme d'exécution d'événements de JS.
. Les amis, vous pouvez essayer d'écrire l'ordre d'impression.
JSJS
principalement utilisé comme langage de script du navigateur. L'objectif principal de Js
est de faire fonctionner le DOM, ce qui détermine que JS
doit être monothread si JS
est multithread comme Java et si deux threads fonctionnent. le DOM en même temps, alors le navigateur devrait Comment l'implémenter ?
La sortie de JS
vise en fait à profiter de la popularité de Java. Le langage a été écrit il n'y a pas longtemps, c'est pourquoi JS est un
Puisque JS est monothread, les tâches doivent être triées. Toutes les tâches seront exécutées selon une règle.
Tâches synchrones
Tâches asynchrones
Les tâches synchrones et asynchrones entrent dans la pile d'exécution. JS déterminera d'abord que le type de tâche
est une tâche synchrone. Si elle entre directement dans le thread principal,
il s'agit d'une tâche asynchrone. Entrez dans Event Table
et enregistrez la fonction de rappel Event Queue
.Une
fois toutes les tâches synchrones exécutées, JS entre dans Event Queue
. La fonction de lecture
exécute ce processus à plusieurs reprises jusqu'à ce que toutes les tâches soient terminées. C'est ainsi qu'on dit souvent que事件循环
emmmmm, je ne sais pas. . . . JS doit avoir sa propre logique unique pour déterminer si la pile d'exécution est vide.
La séquence d'exécution des tâches asynchrones est la suivante: Macro-tâches -> Micro-tâches
Les tâches asynchrones peuvent être divisées en
macro-tâches
Micro-tâches
I/0
setTimeout
setInterval
Promise
.puis
.catch
vite Un plug - in configuré auparavant , il y a un problème avec la version, veuillez ignorer cette alarme rouge.
开始了
par une tâche synchrone. Elle entre d'abord dans la pile d'exécution
pour exécuter task()
a
est une tâche synchrone. L'entrée dans la pile d'exécution
async/await est le processus de asynchrone à synchrone. exécuté de manière synchrone. Ce qui suit Le code sera asynchrone. b
entre dans la pile d'exécution en tant que tâche synchrone,
a end
devient la microtâche de la tâche asynchrone et entre dans la pile d'exécution
Jusqu'à présent, la file d'attente des tâches synchrones a开始了
, a
, b
Jusqu'à présent, la file d'attente des tâches asynchrones a démarré la macro. tâches : setTimeout
Microtâche : a end
Alors voici la question : cela ne signifie-t-il pas que les macro-tâches seront exécutées plus tôt que les micro-tâches ? Pourquoi setTimeout
est-il imprimé après a end
?
看这张图
setTimeout entre dans la file d'attente des tâches en tant que tâche macro. La raison en
est donc généralement :
l'attente asynchrone conduit à la génération de micro-tâches, mais cette micro-tâche appartient à la macro-tâche actuelle. Par conséquent, a end
sera exécutée en premier, et après l'exécution, il sera jugé que la macro-tâche en cours est terminée. Exécutez la macro-tâche suivante, imprimez setTimeout
c
En raison de la conversion de Promise, elle devient une tâche synchrone et entre dans la file d'attente des tâches
c end
micro-tâche dérivée de Promise
d
entre dans la
file d'attente des tâches en tant que tâche synchrone.
a
b
c
d
a fin de la microtâche
c fin de la microtâche
setTimeout macrotâche
donc l'ordre d'impression est le suivant
Ma compréhension du mécanisme d'exécution JS est peut-être quelque peu incorrecte, et j'espère que vous pourrez le signaler.
[Tutoriels vidéo associés recommandés : front-end Web]
Ce qui précède est une analyse approfondie des détails du mécanisme d'exécution d'événements dans JS. Pour plus d'informations, veuillez prêter attention aux autres articles connexes sur le site Web chinois de PHP !