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>
|