Você já aprendeu o que são closures no JavaScript: funções que “lembram” do escopo onde foram criadas.

Agora chegou a hora de ir além do conceito básico e entender:

por que closures são usadas em código profissional e arquiteturas reais.

🎯 Objetivo da aula

Ao final desta aula, você será capaz de:

  • Entender closures como mecanismo de estado
  • Usar closures para encapsulamento
  • Evitar armadilhas comuns
  • Reconhecer closures em bibliotecas reais
  • Usar closures de forma intencional

Relembrando o básico (rapidamente)

Uma closure acontece quando:

  • Uma função é criada dentro de outra
  • A função interna acessa variáveis externas
  • Essas variáveis continuam acessíveis após a execução
 
  function externa() 
  { 
    let mensagem = "Olá";
    function interna() 
    {
      console.log(mensagem);
    }
    return interna;
  }
  const fn = externa();
  fn(); // Saída será: Olá

Closure ≠ truque

Closure não é um “efeito colateral”.

Ela é uma consequência direta de como:

  • Escopos funcionam
  • Funções são valores
  • O Call Stack libera contextos
O escopo léxico é preservado mesmo após a execução da função externa.

Caso 1 — Closure como estado privado

Closures permitem criar estado sem usar variáveis globais.

 
  function criarContador() 
  { 
    let contador = 0;
    return function () 
    {
      contador++;
      return contador;
    };
  }
  const contar = criarContador();
  console.log(contar()); // Saída será 1
  console.log(contar()); // Saída será 2
  console.log(contar()); // Saída será 3

Aqui:

  • contador é privado
  • Só a função interna pode acessá-lo
  • O valor é preservado entre chamadas

Por que isso é poderoso?

Porque você consegue:

  • Encapsular estado
  • Evitar poluição global
  • Controlar acesso aos dados
Isso é base de frameworks, bibliotecas e módulos

Caso 2 — Closure para configuração

Muito comum em código real:

 
  function criarSaudacao(prefixo) 
  { 
    return function (nome) 
    { 
      console.log(prefixo + ", " + nome); 
    }; 
  }
  const ola = criarSaudacao("Olá");
  const bomDia = criarSaudacao("Bom dia");
  ola("Daniel"); // Saída será: Olá, Daniel
  bomDia("Daniel"); // Saída será: Bom dia, Daniel

A função interna “lembra” do prefixo.

Caso 3 — Closure em loops (armadilha clássica)

Observe este código:

 for (var i = 1; i <= 3; i++) { setTimeout(() => { console.log(i); }, 100); } 
 console.log(i); // Saída será: // 4 // 4 // 4 

Por quê?

  • var não tem escopo de bloco
  • A closure captura a variável, não o valor

Correção com let

 for (let i = 1; i <= 3; i++) { setTimeout(() => { console.log(i); }, 100); } 
 console.log(i); // Saída será: // 1 // 2 // 3 
let cria um novo escopo a cada iteração.

Caso 4 — Closure como fábrica de funções

Closures são muito usadas para criar funções especializadas.

 
  function multiplicador(fator) 
  { 
    return function (numero) 
    { 
      return numero * fator; 
    }; 
  }
  const dobrar = multiplicador(2);
  const triplicar = multiplicador(3);
  console.log(dobrar(5)); // Saída será 10
  console.log(triplicar(5)); // Saída será 15

Closures em bibliotecas reais

Você usa closures o tempo todo sem perceber:

  • Event listeners
  • Hooks (React)
  • Middlewares
  • Factories
Closure é o mecanismo por trás da maioria das abstrações modernas.

Quando tomar cuidado

  • Closures podem manter dados vivos na memória
  • Uso excessivo pode dificultar debug
  • Use quando há real necessidade de estado persistente

Resumo da aula para nunca mais esquecer

  • Closures preservam o escopo léxico
  • Funções lembram do ambiente onde nasceram
  • Closures permitem estado privado
  • São base de módulos e abstrações
  • Não são truque — são arquitetura

Na próxima aula, vamos para outro pilar do JavaScript moderno: Imutabilidade.


HARDWARE

Entendendo o seu computador

O que há dentro do meu computador?

Existem alguns componentes fundamentais presentes dentro do seu computador e é muito importante que você conheça um pouco sobre eles, seja para argumentar com algum vendedor durante a compra de um novo PC ou para identificar alguma atitude desleal de algum técnico que esteja te passando um orçamento para reparo. Na seção Raio-X aqui do Contém Bits você pode conhecer e entender mais detalhadamente sobre cada componente, ou também pode clicar abaixo no componente que deseja, para conhecê-lo melhor.

  • Gabinetes

  • Placas-Mãe

  • Processadores

  • Memória

  • Fontes

  • Drives Ópticos

  • Discos Rígidos

  • SSD

  • Placas de Som

  • Placas de Vídeo

Você Sabia?

O título Asteroids, do Atari, possui recorde de pontuação há 30 anos. Em 1982 um americano chamado Scott Safran atingiu a marca de 41.336.440. Atualmente ele faz parte de um minúsculo grupo de jogadores que conseguiram manter seus recordes por mais de 30 anos.


As primeiras máquinas de fliperama do mundo a utilizarem moedas, chamadas de Galaxy Game, custavam mais de 20 mil dólares para serem produzidas. Saiba mais sobre elas aqui.


O console Nintendo Entertainment System (NES), da Nintendo, detém o recorde de videogame mais clonado em todo o mundo. Já foram catalogados mais de 300 aparelhos diferentes capazes de reproduzir seus jogos! Saiba mais sobre ele aqui.


Considerando todas as adaptações de jogos de videogame para o cinema, a mais bem sucedida foi Lara Croft: Tomb Raider, lançado em 2001 e que faturou 274 milhões de dólares. Ele foi dirigido por Simon West e estrelado pela bela Angelina Jolie.


Desde o seu lançamento, em 1985, o fantástico jogo Tetris vende pelo menos 70 milhões de unidades por ano em todo o mundo! Os dados são oficiais e fornecidos pela THQ, uma das distribuidoras do título.