Resumo : neste tutorial, você aprenderá sobre o JavaScript Call Stack, que é um mecanismo para controlar as chamadas de função.
Introdução à pilha de chamadas JavaScript
Uma pilha de chamadas é uma forma de o mecanismo JavaScript controlar seu lugar no código que chama várias funções. Ele contém informações sobre qual função está sendo executada no momento e quais funções são invocadas dentro dessa função…
Além disso, o mecanismo JavaScript usa uma pilha de chamadas para gerenciar contextos de execução :
- O contexto de execução global
- Contextos de execução de função
A pilha de chamadas funciona com base no princípio LIFO (último a entrar, primeiro a sair).
Quando você executa um script, o mecanismo JavaScript cria um contexto de execução global e o coloca no topo da pilha de chamadas.
Sempre que uma função é chamada, o mecanismo JavaScript cria um contexto de execução de função para a função, coloca-o no topo da pilha de chamadas e começa a executar a função.
Se uma função chama outra função, o mecanismo JavaScript cria um novo contexto de execução de função para a função que está sendo chamada e a coloca no topo da pilha de chamadas.
Quando a função atual é concluída, o mecanismo JavaScript a retira da pilha de chamadas e retoma a execução de onde parou.
O script irá parar quando a pilha de chamadas estiver vazia.
Exemplo de pilha de chamadas JavaScript
Vamos começar com o seguinte exemplo:
function add(a, b) {
return a + b;
}
function average(a, b) {
return add(a, b) / 2;
}
let x = average(10, 20);
Linguagem de código: JavaScript ( javascript )
Quando o mecanismo JavaScript executa esse script, ele coloca o contexto de execução global (denotado por main()
ou global()
função na pilha de chamadas.
O contexto de execução global entra na fase de criação e passa para a fase de execução.
O mecanismo JavaScript executa a chamada para a average(10, 20)
função e cria um contexto de execução de função para a average()
função e a coloca no topo da pilha de chamadas:
O mecanismo JavaScript começa a executar average()
desde porque a average()
função está no topo da pilha de chamadas.
A average()
função chama add()
a função. Neste ponto, o mecanismo JavaScript cria outro contexto de execução de função para a add()
função e a coloca no topo da pilha de chamadas:
O mecanismo JavaScript executa a add()
função e a retira da pilha de chamadas:
Neste ponto, a average()
função está no topo da pilha de chamadas, o mecanismo JavaScript é executado e a retira da pilha de chamadas.
Agora, a pilha de chamadas está vazia, então o script para de ser executado:
A imagem a seguir ilustra o status geral da Pilha de Chamadas em todas as etapas:
Estouro de pilha
A pilha de chamadas tem um tamanho fixo, dependendo da implementação do ambiente host, seja o navegador da web ou o Node.js.
Se o número de contextos de execução exceder o tamanho da pilha, ocorrerá um erro de estouro de pilha.
Por exemplo, quando você executa uma função recursiva que não possui condição de saída, o mecanismo JavaScript emitirá um erro de estouro de pilha:
function fn() {
fn();
}
fn(); // stack overflow
Linguagem de código: JavaScript ( javascript )
JavaScript assíncrono
JavaScript é uma linguagem de programação de thread único. Isso significa que o mecanismo JavaScript possui apenas uma pilha de chamadas. Portanto, só pode fazer uma coisa de cada vez.
Ao executar um script, o mecanismo JavaScript executa o código de cima para baixo, linha por linha. Em outras palavras, é síncrono.
Assíncrono significa que o mecanismo JavaScript pode executar outras tarefas enquanto aguarda a conclusão de outra tarefa. Por exemplo, o mecanismo JavaScript pode:
- Solicitação de dados de um servidor remoto.
- Exibir um botão giratório
- Quando os dados estiverem disponíveis, exiba-os na página da web.
Para fazer isso, o mecanismo JavaScript usa um loop de eventos , que será abordado no tutorial a seguir.
Resumo
- O mecanismo JavaScript usa uma pilha de chamadas para gerenciar contextos de execução.
- A pilha de chamadas usa a estrutura de dados da pilha que funciona com base no princípio LIFO (último a entrar, primeiro a sair).