罗源县第十届“畲族·风”民俗文化旅游节盛大开幕
A pilha de chamadas (call stack) é 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.
- Quando o script chama a fun??o, ela é adicionada à pilha de chamadas, e ent?o é iniciado o carregamento da fun??o.
- Qualquer fun??o chamada por essa fun??o será adicionada à pilha de chamadas uma acima da outra.
- 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.
- Caso a pilha ocupar mais espa?o do que foi separado a ela, será exibido um erro "stack overflow" (estouro de pilha).
Exemplo
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
O código acima será executado desta forma pelo interpretador:
-
Todas as fun??es ser?o ignoradas, até chegar na chamada da fun??o
saudacao()
. -
Adiciona a fun??o
saudacao()
para a pilha de chamadas.Nota: Pilha de chamadas: - saudacao
-
Executa todas as linhas de código da fun??o
saudacao()
. -
Chama a fun??o
digaOi()
. -
Adiciona a fun??o
digaOi()
na pilha de chamadas.Nota: Pilha de chamadas: -
saudacao
> - digaOi -
Executa todas as linhas de código da fun??o
digaOi()
até o final. -
Retorna a execu??o na linha onde foi chamada a fun??o
digaOi()
e continua a execu??o do resto da fun??osaudacao()
. -
Deleta a fun??o
digaOi()
da pilha de chamadas.Nota: Pilha de chamadas: -
saudacao
-
Quando todas as linhas da fun??o
saudacao()
forem executadas, retorna para a linha onde a fun??o foi invocada, e continua a execu??o do resto do código. -
Deleta a fun??o
saudacao()
da Pilha de chamadas.Nota: Pilha de chamadas: EMPTY
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.
Veja mais
General knowledge
- Call stack on Wikipedia
- MDN Web Docs Glossary