<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: obrenoco</title>
    <description>The latest articles on DEV Community by obrenoco (@obrenoco).</description>
    <link>https://dev.to/obrenoco</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F564840%2Fa71f6df4-1ba3-445b-8eeb-e7ae53461281.png</url>
      <title>DEV Community: obrenoco</title>
      <link>https://dev.to/obrenoco</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/obrenoco"/>
    <language>en</language>
    <item>
      <title>🔥🕺🏼JavaScript em Imagens: Hoisting</title>
      <dc:creator>obrenoco</dc:creator>
      <pubDate>Sat, 05 Nov 2022 23:20:47 +0000</pubDate>
      <link>https://dev.to/obrenoco/javascript-em-imagens-hoisting-5g5h</link>
      <guid>https://dev.to/obrenoco/javascript-em-imagens-hoisting-5g5h</guid>
      <description>&lt;p&gt;&lt;em&gt;Hoisting&lt;/em&gt; é um daqueles termos que toda pessoa que desenvolve em JS já ouviu falar porque você pesquisou um erro irritante no Google, acabou no StackOverflow e a pessoa disse que esse erro foi causado por&amp;nbsp;&lt;em&gt;hoisting&lt;/em&gt; 🙃. Afinal, o que é hoisting?&amp;nbsp;(PS: o&amp;nbsp;&lt;em&gt;escopo&lt;/em&gt;&amp;nbsp;será abordado em outro post, eu gosto de manter posts pequenos e focados)&lt;/p&gt;

&lt;p&gt;Se você é iniciante no JavaScript, pode ter experimentado um comportamento “estranho” onde algumas variáveis são aleatoriamente&amp;nbsp;&lt;code&gt;undefined&lt;/code&gt;, algumas&amp;nbsp;&lt;code&gt;ReferenceError&lt;/code&gt; s são lançadas e assim por diante.&amp;nbsp;Hoisting é frequentemente explicado como&amp;nbsp;&lt;em&gt;colocar variáveis e funções no topo do arquivo&lt;/em&gt;&amp;nbsp;, mas não, não é isso que está acontecendo, embora o comportamento possa parecer 😃.&lt;/p&gt;

&lt;p&gt;Quando o mecanismo JS pega nosso script, a primeira coisa que ele faz é&amp;nbsp;&lt;strong&gt;configurar a memória&lt;/strong&gt;&amp;nbsp;para os dados em nosso código.&amp;nbsp;Nenhum código é executado neste momento, ele está simplesmente preparando tudo para execução.&amp;nbsp;A maneira como as declarações de funções e variáveis são armazenadas é diferente.&amp;nbsp;As funções são armazenadas com uma&amp;nbsp;&lt;strong&gt;referência à função inteira&lt;/strong&gt;&amp;nbsp;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--w0VqgBXg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/42pslfxdyz4i4w5w6r4w.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--w0VqgBXg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/42pslfxdyz4i4w5w6r4w.gif" alt="01 - HOISTING.gif" width="880" height="495"&gt;&lt;/a&gt;&lt;br&gt;
Com variáveis é um pouco diferente.&amp;nbsp;O ES6 introduziu duas novas palavras-chave para declarar variáveis:&amp;nbsp;&lt;code&gt;let&lt;/code&gt;e&amp;nbsp;&lt;code&gt;const&lt;/code&gt;.&amp;nbsp;Variáveis declaradas com as palavras-chave&amp;nbsp;&lt;code&gt;let&lt;/code&gt;or&amp;nbsp;&lt;code&gt;const&lt;/code&gt;são armazenadas  como &lt;code&gt;uninitialized&lt;/code&gt;.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--BW_u8NwB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hb7wctpuz1o57bbru1fv.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--BW_u8NwB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hb7wctpuz1o57bbru1fv.gif" alt="02 - HOISTING (1).gif" width="880" height="495"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As variáveis declaradas com a palavra-chave&amp;nbsp;&lt;code&gt;var&lt;/code&gt; são armazenadas com o valor padrão de&amp;nbsp;&lt;code&gt;undefined&lt;/code&gt;.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--fg83qED7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0u2fw1j61s27g53wuagq.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fg83qED7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0u2fw1j61s27g53wuagq.gif" alt="03 - HOISTING (4).gif" width="880" height="495"&gt;&lt;/a&gt;&lt;br&gt;
Agora que a fase de criação está concluída, podemos realmente executar o código.&amp;nbsp;Vamos ver o que acontece se tivéssemos 3 comandos &lt;code&gt;console.log()&lt;/code&gt; no topo do arquivo, antes de declararmos a função ou qualquer uma das variáveis.&lt;/p&gt;

&lt;p&gt;Como as funções são armazenadas com uma referência a todo o código da função, podemos invocá-las&amp;nbsp;&lt;em&gt;antes&lt;/em&gt;&amp;nbsp;mesmo da linha em que as criamos!&amp;nbsp;🔥&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--lwN4w-1B--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/oldpnjxrcijt0ge4wj8d.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--lwN4w-1B--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/oldpnjxrcijt0ge4wj8d.gif" alt="04 - HOISTING (1).gif" width="880" height="495"&gt;&lt;/a&gt;&lt;br&gt;
Quando referenciamos uma variável declarada com a palavra-chave&amp;nbsp;&lt;code&gt;var&lt;/code&gt; antes de sua declaração, ela simplesmente retornará seu valor padrão com o qual foi armazenada:&amp;nbsp;&lt;code&gt;undefined&lt;/code&gt;!&amp;nbsp;No entanto, isso às vezes pode levar a um comportamento "inesperado".&amp;nbsp;Na maioria dos casos, isso significa que você está fazendo referência a ele sem querer (você provavelmente não quer que ele realmente tenha o valor de&amp;nbsp;&lt;code&gt;undefined&lt;/code&gt;) 😬&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--B94g7r_o--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dz478efzvil1y0ly6mtn.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--B94g7r_o--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dz478efzvil1y0ly6mtn.gif" alt="05 - Hoisting" width="880" height="495"&gt;&lt;/a&gt;&lt;br&gt;
Para evitar a possibilidade de referenciar acidentalmente uma variável&amp;nbsp;&lt;code&gt;undefined&lt;/code&gt;, como poderíamos com a palavra-chave&amp;nbsp;&lt;code&gt;var&lt;/code&gt;, uma&amp;nbsp;&lt;code&gt;ReferenceError&lt;/code&gt;é lançada sempre que tentamos acessar&amp;nbsp;variáveis&amp;nbsp;&lt;em&gt;não inicializadas .&lt;/em&gt;&amp;nbsp;A "zona" antes de sua declaração real é chamada de&amp;nbsp;&lt;strong&gt;zona morta temporal&lt;/strong&gt;&amp;nbsp;(ou &lt;strong&gt;temporal dead zone&lt;/strong&gt;): você não pode referenciar as variáveis (isso inclui classes ES6 também!) antes de sua inicialização.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--6py4sgk3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/a8ucxqehyzu52h4u1w8r.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6py4sgk3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/a8ucxqehyzu52h4u1w8r.gif" alt="06 - HOISTING (1).gif" width="880" height="495"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Quando o mecanismo passa a linha na qual declaramos as variáveis, os valores na memória são substituídos pelos valores com os quais realmente os declaramos.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--prIzgAy2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ycyrbdppncl78oeqiq7a.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--prIzgAy2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ycyrbdppncl78oeqiq7a.gif" alt="07 - HOISTING.gif" width="880" height="495"&gt;&lt;/a&gt;&lt;br&gt;
Prontinho!&amp;nbsp;🎉 Recapitulando rapidamente:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Funções e variáveis são armazenadas na memória para um contexto de execução antes de executarmos nosso código.&amp;nbsp;Isso é chamado de&amp;nbsp;&lt;em&gt;hoisting&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;As funções são armazenadas com uma referência a todas as funções, as variáveis com a&amp;nbsp;&lt;code&gt;var&lt;/code&gt;palavra-chave com o valor de&amp;nbsp;&lt;code&gt;undefined&lt;/code&gt;e as variáveis com a palavra-chave&amp;nbsp;&lt;code&gt;let&lt;/code&gt;and&amp;nbsp;&lt;code&gt;const&lt;/code&gt;são armazenadas&amp;nbsp;&lt;em&gt;não inicializadas&lt;/em&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Espero que o termo&amp;nbsp;&lt;em&gt;hoisting&lt;/em&gt; seja um pouco menos vago agora que analisamos o que está acontecendo quando executamos nosso código.&amp;nbsp;Como sempre, não se preocupe se ainda não fizer muito sentido.&amp;nbsp;Você ficará muito mais confortável com ele quanto mais trabalhar com ele.&amp;nbsp;Sinta-se à vontade para me pedir ajuda, será um prazer ajudar!&amp;nbsp;😃&lt;/p&gt;




&lt;p&gt;Essa é uma tradução da série de artigos&amp;nbsp;&lt;a href="https://dev.to/lydiahallie/series/3341"&gt;JavaScript Visualized&lt;/a&gt; criado com maestria por&amp;nbsp;&lt;a href="https://dev.to/lydiahallie"&gt;Lydia Hallie&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>javascript</category>
    </item>
    <item>
      <title>✨♻️ JavaScript em Imagens: Loop de Eventos</title>
      <dc:creator>obrenoco</dc:creator>
      <pubDate>Fri, 04 Nov 2022 20:52:26 +0000</pubDate>
      <link>https://dev.to/obrenoco/javascript-em-imagens-loop-de-eventos-goh</link>
      <guid>https://dev.to/obrenoco/javascript-em-imagens-loop-de-eventos-goh</guid>
      <description>&lt;p&gt;Oh céus, o loop de eventos. &lt;br&gt;
É uma daquelas coisas que todo mundo que desenvolve em JavaScript tem que lidar de uma forma ou de outra, mas pode ser um pouco confuso de entender no início. Eu aprendo melhor de uma maneira mais visual, então pensei em tentar ajudar explicando de maneira visual através de gifs de baixa resolução.&lt;br&gt;
Mas primeiro, o que é o loop de eventos e por que você deveria se importar?&lt;/p&gt;

&lt;p&gt;JavaScript é &lt;strong&gt;single-threaded&lt;/strong&gt;: apenas uma tarefa pode ser executada por vez. Normalmente isso não faz muita diferença, mas agora imagine que você está executando uma tarefa que leva 30 segundos. Toda a interface do usuário ficará travada por 30 segundos. 😬 É 2022, ninguém quer um site lento e sem resposta.&lt;/p&gt;

&lt;p&gt;Felizmente, o navegador nos oferece alguns recursos que o próprio mecanismo JavaScript não fornece: uma API da Web. Isso inclui a DOM API, &lt;code&gt;setTimeout()&lt;/code&gt;, requests HTTP e assim por diante. Isso pode nos ajudar a criar um comportamento assíncrono e sem bloqueio 🚀&lt;/p&gt;

&lt;p&gt;Quando invocamos uma função, ela é adicionada a algo chamado pilha de chamadas - callstack. A pilha de chamadas faz parte do mecanismo JS, isso não é específico do navegador. É uma pilha, o que significa que o que está embaixo foi o primeiro a entrar e o último a sair (pense em uma pilha de panquecas). Quando uma função retorna um valor, ela é retirada da pilha 👋&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhqk5abiptkr91gqy47j9.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhqk5abiptkr91gqy47j9.gif" alt="Funções são empurradas para a pilha de chamadas quando são invocadas e removidas quando retornam um valor"&gt;&lt;/a&gt;&lt;br&gt;
A função &lt;code&gt;respond()&lt;/code&gt; retorna uma função &lt;code&gt;setTimeout()&lt;/code&gt;. O &lt;code&gt;setTimeout()&lt;/code&gt; é fornecido pela API da Web: ele permite atrasar tarefas sem bloquear o thread principal. A função de callback que passamos para a função &lt;code&gt;setTimeout()&lt;/code&gt;, a arrow function &lt;code&gt;() =&amp;gt; { return 'Hey' }&lt;/code&gt; é adicionada à API da Web. Enquanto isso, a função &lt;code&gt;setTimeout()&lt;/code&gt; e a função &lt;code&gt;respond()&lt;/code&gt; são retiradas da pilha, e ambas retornam seus valores!&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc90e06c3mhlz8mshw0a9.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc90e06c3mhlz8mshw0a9.gif" alt="setTimeout é fornecido pelo navegador, a Web API cuida do callback que passamos para ela"&gt;&lt;/a&gt;&lt;br&gt;
Na Web API, um cronômetro é executado durante o tempo do segundo argumento que passamos para ele, 1000ms. O callback não é adicionado imediatamente à pilha de chamadas, em vez disso, é passado para algo chamado fila - queue.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flkneh7mdcxac4u99t15l.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flkneh7mdcxac4u99t15l.gif" alt="Quando o temporizador termina - 1000ms neste caso - o callback é passado para a fila de callbacks"&gt;&lt;/a&gt;&lt;br&gt;
Esta parte pode ser um pouco confusa: isso não significa que a função de callback seja adicionada à pilha de chamadas (retornando um valor) após 1000ms! Ele simplesmente é adicionado à &lt;em&gt;fila&lt;/em&gt; após 1000ms. Mas é uma fila, a função tem que esperar a sua vez!&lt;br&gt;
Agora esta é a parte que todos estávamos esperando... É hora do event loop fazer sua única tarefa: &lt;strong&gt;conectar a fila (queue) com a pilha de chamadas (call stack)&lt;/strong&gt;! Se a pilha de chamadas estiver &lt;strong&gt;vazia&lt;/strong&gt;, e se todas as funções invocadas anteriormente retornaram seus valores e foram retiradas da pilha, o &lt;em&gt;primeiro item&lt;/em&gt; da fila será adicionado à pilha de chamadas. Nesse caso, nenhuma outra função foi chamada, o que significa que a pilha de chamadas estava vazia quando a função de callback foi o primeiro item da fila.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0evzcozdfj690u56rck8.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0evzcozdfj690u56rck8.gif" alt="O loop de eventos examina a fila de callbacks e a pilha de chamadas. Se a pilha de chamadas estiver vazia, ela empurra o primeiro item da fila para a pilha"&gt;&lt;/a&gt;&lt;br&gt;
O callback é adicionado à pilha de chamadas, é invocado, retorna um valor e é retirado da pilha.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkbgd2oub6p7a1b5cfwu7.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkbgd2oub6p7a1b5cfwu7.gif" alt="O callback é adicionado à pilha de chamadas e executado. Depois de retornar um valor, ele é retirado da pilha de chamadas."&gt;&lt;/a&gt;&lt;br&gt;
Ler um artigo é divertido, mas você só ficará totalmente confortável com isso trabalhando com ele repetidamente. Tente descobrir o que é registrado no console se executarmos o seguinte:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;foo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;First&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;bar&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;setTimeout&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Second&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;baz&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Third&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nf"&gt;bar&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nf"&gt;foo&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nf"&gt;baz&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Entendeu? Vamos dar uma olhada rápida no que está acontecendo quando estamos executando este código em um navegador:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faqxqqtz90vs5rmi4xdhf.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faqxqqtz90vs5rmi4xdhf.gif" alt="Event loop schema"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Invocamos &lt;code&gt;bar()&lt;/code&gt;. &lt;code&gt;bar()&lt;/code&gt; retorna uma função &lt;code&gt;setTimeout()&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;O callback que passamos para &lt;code&gt;setTimeout()&lt;/code&gt; é adicionado à Web API, a função &lt;code&gt;setTimeout()&lt;/code&gt; e &lt;code&gt;bar()&lt;/code&gt; são retiradas da pilha de chamadas.&lt;/li&gt;
&lt;li&gt;O cronômetro é executado, enquanto isso &lt;code&gt;foo()&lt;/code&gt; é invocado e registrado em primeiro lugar. &lt;code&gt;foo()&lt;/code&gt; retorna (undefined), &lt;code&gt;baz()&lt;/code&gt; é invocado e o callback é adicionado à fila.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;baz()&lt;/code&gt; logga &lt;code&gt;Third&lt;/code&gt;. O loop de eventos vê que a pilha de chamadas está vazia após o retorno de &lt;code&gt;baz()&lt;/code&gt;, após o qual o callback é adicionado à pilha de chamadas.&lt;/li&gt;
&lt;li&gt;O callback logga &lt;code&gt;Second&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;Espero que isso faça você se sentir um pouco mais confortável com o loop de eventos! Não se preocupe se ainda parecer confuso, o mais importante é &lt;strong&gt;entender de onde certos erros/comportamentos podem vir&lt;/strong&gt; para pesquisar no &lt;strong&gt;Google os termos certos com eficiência&lt;/strong&gt; e acabar na página correta do Stack Overflow 💪🏼 Sinta-se à vontade para entrar em contato comigo se você tiver alguma dúvida!&lt;/p&gt;




&lt;p&gt;Essa é uma tradução da série de artigos &lt;a href="https://dev.to/lydiahallie/series/3341"&gt;JavaScript Visualized&lt;/a&gt; criado com maestria por &lt;a href="https://dev.to/lydiahallie"&gt;Lydia Hallie&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>javascript</category>
    </item>
  </channel>
</rss>
