aboutsummaryrefslogtreecommitdiff
path: root/files/es/glossary/call_stack/index.html
blob: 9980c2811a7e44f6e7d9b7276a604ff91a14e725 (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
90
91
92
93
---
title: Pila de llamadas
slug: Glossary/Call_stack
tags:
  - Glosario
  - JavaScript
  - Pila de llamadas
translation_of: Glossary/Call_stack
original_slug: Glossary/Pila_llamadas
---
<p>Una <strong>pila de llamadas</strong> es un mecanismo para que un intérprete (como el intérprete de JavaScript en un navegador web) realice un seguimiento de en que lugar se llama a múltiples {{glossary("function","funciones")}}, qué función se esta ejecutando actualmente y qué funciones son llamadas desde esa función, etc.</p>

<ul>
 <li>Cuando un script llama a una función, el intérprete la añade a la pila de llamadas y luego empieza a ejecutar la función.</li>
 <li>Cualquier función o funciones que sean llamadas por esa función son añadidas arriba de la pila de llamadas y serán ejecutadas cuando su llamada sea alcanzada.</li>
 <li>Cuando la función actual termina, el intérprete la elimina de la pila y reanuda la ejecución donde se quedó.</li>
 <li>Si la pila necesita más espacio del que se le asignó, se producirá un error de "desbordamiento de pila".</li>
</ul>

<h2 id="Ejemplo">Ejemplo</h2>

<pre class="brush: js">function saludar() {
   // [1] Código
   diHola();
   // [2] Código
}
function diHola() {
   return "!Hola!";
}

// Invocar la función `saludar`
saludar();

// [3] Código
</pre>

<p>El código del ejemplo se ejecutaría de la siguiente manera:</p>

<ol>
 <li>Ignora todas las funciones hasta que alcanza la invocación de la función <code>saludar()</code>.</li>
 <li>Añade la función <code>saludar()</code> a la lista de la pila de llamadas.
  <div class="note">
  <p>Lista de la pila de llamadas:<br>
   - saludar</p>
  </div>
 </li>
 <li>Ejecuta todas las líneas de código de dentro de la función <code>saludar()</code>.</li>
 <li>Llega a la incovación de la función <code>diHola()</code>.</li>
 <li>Añade la función <code>diHola()</code> a la lista de la pila de llamadas.
  <div class="note">
  <p>Lista de la pila de llamadas:<br>
   - saludar<br>
   - diHola</p>
  </div>
 </li>
 <li>Ejecuta todas las líneas de código de dentro de la función <code>diHola()</code> hasta que llega al final.</li>
 <li>Devuelve la ejecución a la línea que invocó a la función <code>diHola()</code> y continua con la ejecuación del resto de código de la función <code>saludar()</code>.</li>
 <li>Elimina la función <code>diHola()</code> de la lista de la pila de llamadas.
  <div class="note">
  <p>Lista de la pila de llamadas:<br>
   - saludar</p>
  </div>
 </li>
 <li>Cuando todo el código dentro de la función <code>saludar()</code> ha sido ejecutado, vuelve a la línea que la invocó y continua ejecutando el resto de código JavaScript.</li>
 <li>Elimina la función <code>saludar()</code> de la lista de la pila de llamadas.
  <div class="note">
  <p>Lista de la pila de llamadas:<br>
   VACÍA</p>
  </div>
 </li>
</ol>

<p>En resumen, empezamos con una lista de la pila llamadas vacía. Cuando invocamos una función, ésta es automáticamente añadida a la pila de llamadas. Una vez ha ejecutado todo su código, también de manera automática es eliminada de la pila de llamadas. Finalmente, la pila de llamadas vuelve a estar vacía.</p>

<h2 id="Saber_más">Saber más</h2>

<h3 id="Conocimiento_general">Conocimiento general</h3>

<ul>
 <li>{{Interwiki("wikipedia", "Pila de llamadas")}} en Wikipedia</li>
</ul>

<section id="Quick_links">
<ul>
 <li><a href="/es-ES/docs/Glossary">Glosario</a>

  <ul>
   <li>{{Glossary("Call stack", "Pila de llamadas")}}</li>
   <li>{{Glossary("function", "Función")}}</li>
  </ul>
 </li>
</ul>
</section>