Descondificando CC

Como é que o JavaScript executa o meu código?

December 21, 2019

JavaScript
Intermediário

Quando escrevemos código em JavaScript, o runtime(Browser/Node) da mesma processa o nosso codigo linha por linha, reserva espaço na memória para as variáveis e funções.

const nome = "Faustino";

function saudacoes(n) {
  const result = `Olá ${n}`;
  return result;
}

const result = saudacoes(nome);
result; // Olá Faustino

Quando executamos o código acima, o motor do JavaScript cria um Contexto de Execução Global(em inglês Global Execution Context)

Contexto de Execução Global

O Contexto de Execução Global é nada mais do que um processo que é responsável por duas simples tarefas:

  • Ler o código linha por linha
  • Criar memória para todos os dados

Este processo é feito quando executamos uma aplicação ou script, e é restrito ao nível superior(em inglês top-level) do nosso código, em outras palavras isto quer dizer que o Javascript não lê as intruções de códigos que se encontram dentro de funções até as mesmas serem executadas explicitamente.

Thread de execução

O processo de leitura do código linha após linha é também conhecido como Thread, nesta etapa, tudo o que o Javascript faz é analisar (em inglês parse) e executar o nosso código.

O thread possui duas caracteristicas, que são:

  • Single thread:

    Isto é a limitação que o JavaScript tem de poder simplesmente executar uma instrução de cada vez.

  • Execução síncrona:

    Isto é a ordem em que a execução é feita, linha após linha.

Ambiente Global de Variáveis

Nesta fase, o JavaScript simplesmente reserva memória para cada tipo de dados que a gente possui na nossa aplicação, estes dados são guardados na memória do computador e a referência(endereço de cada dado na memória) das mesmas é então atribuída à uma variável.

Global+Execution+Context

Quando declaramos variáveis, antes de atribuí-las qualquer tipo de dados, o JavaScript atribui-nas um valor padrão que é undefined.

Invocando Funções

Ao invocarmos(executar) funções, para cada função o JavaScript cria o então chamado Contexto de Execução Local(em inglês Local Execution Context), este processo é idêntico ao processo global.

É neste processo que efectuamos a leitura de cada linha dentro de cada função. Quando declaramos variáveis dentro do corpo de uma função, elas são simplesmente utilizáveis dentro do contexto léxico da mesma.

Local+Execution+Context

O Contexto de Execução Local de cada função é apagado após a execução completa da mesma(quando fazemos um retorno explícito ou implícito).

Próximos tópicos desta série
  • Call Stack
  • Closure
  • Callback/Message/Task Queue
  • Event Loop
  • Async JS