Tradução em progresso.

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 é iniciada 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.
  • If the stack takes up more space than it had assigned to it, it results in a "stack overflow" error.
  • Caso a pilha ocupar mais espaço do que foi separado a ela, será exibido um erro "stack overflow" (estouro de pilha).

Examplo

function greeting() {
   // [1] Algum código aqui
   sayHi();
   // [2] Algum código aqui
}
function sayHi() {
   return "Olá!";
}

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

// [3] Algum código aqui

The code above would be executed like this:

  1. Ignore all functions, until it reaches the greeting() function invocation.
  2. Add the greeting() function to the call stack list.

    Call stack list:
    - greeting

  3. Execute all lines of code inside the greeting() function.
  4. Get to the sayHi() function invocation.
  5. Add the sayHi() function to the call stack list.

    Call stack list:
    - greeting
    - sayHi

  6. Execute all lines of code inside the sayHi() function, until reaches its end.
  7. Return execution to the line that invoked sayHi() and continue executing the rest of the greeting() function.
  8. Delete the sayHi() function from our call stack list.

    Call stack list:
    - greeting

  9. When everything inside the greeting() function has been executed, return to its invoking line to continue executing the rest of the JS code.
  10. Delete the greeting() function from the call stack list.

    Call stack list:
    EMPTY

We started with an empty Call Stack, and whenever we invoke a function, it is automatically added to the Call Stack, after executing all of its codes, it is automatically removed from the Call Stack. At the end, we ended up with an empty stack too.

Learn more

General knowledge

Etiquetas do documento e colaboradores

Colaboradores desta página: mdnwebdocs-bot, helton-mori-dev
Última atualização por: mdnwebdocs-bot,