Como começar rapidamente com o VUE3.0:
Fiquei um pouco confuso quando comecei a estudar uma questão de teste escrito há algum tempo. Hoje analisaremos minuciosamente o mecanismo de execução de eventos do JS.
. Amigos, vocês podem tentar escrever a ordem de impressão.
JS
usado principalmente como linguagem de script do navegador. O objetivo principal de Js
é operar o DOM, que determina que JS
deve ser de thread único se JS
for multithread como Java e se dois threads operarem. o DOM ao mesmo tempo, então o navegador deve Como implementá-lo?
O lançamento do JS
é, na verdade, para aproveitar a popularidade do Java. A linguagem foi escrita há pouco tempo, então é por isso que JS é
Como JS é de thread único, as tarefas devem ser classificadas. Todas as tarefas serão executadas de acordo com uma regra.
Tarefas síncronas
Tarefas assíncronas
Tarefas síncronas e tarefas assíncronas entram na pilha de execução. JS determinará primeiro que o tipo da tarefa
é uma tarefa síncrona. Se entrar diretamente no thread principal,
é uma tarefa assíncrona. Insira Event Table
e registre a função de retorno de Event Queue
Depois
que todas as tarefas síncronas forem executadas, JS entrará Event Queue
. A função de leitura
executa esse processo repetidamente até que todas as tarefas sejam concluídas. É assim que costumamos dizer que o事件循环
emmmmm, não sei. . . . JS deve ter sua própria lógica exclusiva para determinar se a pilha de execução está vazia.
A sequência de execução de tarefas assíncronas é: Tarefas macro -> Micro tarefas
Tarefas assíncronas podem ser divididas em
tarefas macro
Micro tarefas
I/0
setTimeout
setInterval
Promise
.then
.catch
vite Um plug-in configurado antes, há algum problema com a versão, ignore este alarme vermelho.
开始了
com uma tarefa síncrona. Ela primeiro entra na pilha de execução
para executar task()
a
A entrada na pilha de execução
é assíncrona/aguardada. executado de forma síncrona. O seguinte código será assíncrono. b
entra na pilha de execução como uma tarefa síncrona,
a end
se torna a microtarefa da tarefa assíncrona e entra na pilha de execução.
de tarefas
síncronas foi开始了
, a
, b
tarefas: setTimeout
Microtask: a end
Então aí vem a pergunta: isso não significa que as tarefas macro serão executadas antes das micro tarefas? Por que setTimeout
é impresso após a end
?
看这张图
setTimeout entra na fila de tarefas como uma tarefa macro. Portanto, a razão para isso
é de modo geral:
a espera assíncrona leva à geração de microtarefas, mas essa microtarefa pertence à tarefa macro atual. Portanto, a end
será executado primeiro e, após a execução, será considerado que a macro tarefa atual foi encerrada. Execute a próxima tarefa de macro, imprima setTimeout
c
Devido à conversão do Promise, ele se torna uma tarefa síncrona e entra na fila de tarefas
c end
entra na fila de tarefas como uma micro tarefa derivada do Promise
d
fila de tarefas como uma tarefa síncrona.
a
b
c
d
a end microtask
c end microtask
setTimeout macrotask
então a ordem de impressão é a seguinte.
Meu entendimento do mecanismo de execução JS pode estar um tanto incorreto e espero que vocês possam apontar isso.
[Tutoriais em vídeo relacionados recomendados: front-end da web]
O texto acima é uma análise aprofundada dos detalhes do mecanismo de execução de eventos em JS. Para obter mais informações, preste atenção a outros artigos relacionados no site PHP chinês!