aboutsummaryrefslogtreecommitdiff
path: root/files/pt-br/glossary/call_stack/index.html
blob: 772871f93dee1dc0b0aad37d09ec53fb628ebd3d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
---
title: Call stack (Pilha de chamadas)
slug: Glossary/Call_stack
translation_of: Glossary/Call_stack
original_slug: Glossario/Call_stack
---
<p>A pilha de chamadas <strong>(call stack)</strong> é um mecanismo do interpretador de uma linguagem que organiza o funcionamento do script quando são chamadas muitas funções, qual função está sendo executada no momento, e quais serão chamadas dentro de alguma função, etc.</p>

<ul>
 <li>Quando o script chama a função, ela é adicionada à pilha de chamadas, e então é iniciado o carregamento da função.</li>
 <li>Qualquer função chamada por essa função será adicionada à pilha de chamadas uma acima da outra.</li>
 <li>Quando a função termina a execução, o interpretador retira a função da pilha e continua a execução do programa de onde parou.</li>
 <li>Caso a pilha ocupar mais espaço do que foi separado a ela, será exibido um erro "stack overflow" (estouro de pilha).</li>
</ul>

<h2 id="Exemplo">Exemplo</h2>

<pre class="brush: js">function saudacao() {
   // [1] Algum código aqui
   digaOi();
   // [2] Algum código aqui
}
function digaOi() {
   return "Olá!";
}

// Chamando a função `saudacao`
saudacao();

// [3] Algum código aqui
</pre>

<p>O código acima será executado desta forma pelo interpretador:</p>

<ol>
 <li>Todas as funções serão ignoradas, até chegar na chamada da função <code>saudacao()</code>.</li>
 <li>Adiciona a função <code>saudacao()</code> para a pilha de chamadas.
  <div class="note">
  <p>Pilha de chamadas:<br>
   - saudacao</p>
  </div>
 </li>
 <li>Executa todas as linhas de código da função <code>saudacao()</code>.</li>
 <li>Chama a função <code>digaOi()</code>.</li>
 <li>Adiciona a função <code>digaOi()</code> na pilha de chamadas.
  <div class="note">
  <p>Pilha de chamadas:<br>
   - <code>saudacao</code><br>
   - digaOi</p>
  </div>
 </li>
 <li>Executa todas as linhas de código da função <code>digaOi()</code> até o final.</li>
 <li>Retorna a execução na linha onde foi chamada a função <code>digaOi()</code> e continua a execução do resto da função <code>saudacao()</code>.</li>
 <li>Deleta a função <code>digaOi()</code> da pilha de chamadas.
  <div class="note">
  <p>Pilha de chamadas:<br>
   - <code>saudacao</code></p>
  </div>
 </li>
 <li>Quando todas as linhas da função <code>saudacao()</code> forem executadas, retorna para a linha onde a função foi invocada, e continua a execução do resto do código.</li>
 <li>Deleta a função <code>saudacao()</code> da Pilha de chamadas.
  <div class="note">
  <p>Pilha de chamadas:<br>
   EMPTY</p>
  </div>
 </li>
</ol>

<p>Começamos com uma pilha de chamadas vazia, e sempre que chamamos uma função, ela é automaticamente adicionada à pilha de chamadas, e depois de todas as linhas serem executadas, é automaticamente removida da pilha de chamadas. No final, a pilha está vazia novamente.</p>

<h2 id="Veja_mais">Veja mais</h2>

<h3 id="General_knowledge">General knowledge</h3>

<ul>
 <li>{{Interwiki("wikipedia", "Call stack")}} on Wikipedia</li>
</ul>

<section class="Quick_links" id="Quick_Links">
<ul>
 <li><a href="/en-US/docs/Glossary">MDN Web Docs Glossary</a>

  <ul>
   <li>{{Glossary("Call stack")}}</li>
   <li>{{Glossary("Function")}}</li>
  </ul>
 </li>
</ul>
</section>