Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] Dúvida sobre Task Queue / setTimeout

Não consegui entender exatamente em que momento a função sai do Task Queue para ir para o call stack.

No caso do setTimeout, estaremos setando um tempo para que a função comece a ser executada. Mas esse tempo começa a contar a partir de quando? Apenas quando o call stack acaba de realizar todos os outros eventos do código ou a partir do momento que o JS lê a chamada da função?

Todas as vezes que estivermos com eventos em hold no Task Queue isso ocorre da mesma maneira? (Seja ela após a resolução de todo call back ou após a leitura da chamada da função)

1 resposta
solução!

No JavaScript, quando uma função é chamada, ela é colocada no "Call Stack", que é uma espécie de pilha que guarda as funções que estão sendo executadas. O código dentro dessas funções é executado sequencialmente.

Quando encontramos um setTimeout, definimos um tempo para que uma determinada função seja executada após um certo período. Esse tempo começa a contar a partir do momento em que o JavaScript lê a chamada da função setTimeout.

Então, se houver outras funções no "Call Stack" sendo executadas, o setTimeout começa a contar seu tempo mesmo assim. Quando o tempo definido pelo setTimeout se esgota, a função associada a ele é movida do "Task Queue" para o "Call Stack" para ser executada, desde que o "Call Stack" esteja vazio no momento.

Isso não ocorre da mesma maneira para todos os eventos. Por exemplo, eventos como cliques de mouse e respostas de servidor são tratados de forma assíncrona, e suas funções são colocadas no "Task Queue" após sua ocorrência, independentemente do estado do "Call Stack". Essas funções no "Task Queue" esperam sua vez para serem movidas para o "Call Stack" e executadas.

Portanto, o momento em que uma função definida em um setTimeout começa a contar seu tempo é a partir do momento em que o JavaScript lê a chamada da função, e a execução dessa função ocorre quando o "Call Stack" está vazio, independentemente de outros eventos assíncronos no "Task Queue".

espero ter ajudado. :)