Call stack (Pilha de chamadas)
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