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?

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.


Em 1949 a revista Popular Mechanics fez uma previsão para o futuro, dizendo: "Um dia os computadores pesarão menos do que 1,5 tonelada". E pensar que temos smartphones capazes de realizar milhões de vezes mais operações do que os computadores daquela época.


O Playstation só nasceu porque uma parceria entre Sony e Nintendo, para desenvolver uma unidade de CD para o Super Nintendo, fracassou. Clique aqui e saiba mais.


Street Fighter 2, lançado para o Super Nintendo no início dos anos 90, foi o principal responsável pelo aumento nas vendas deste console. Graças ao sucesso do título nos Arcades e à perfeita adaptação ao console, muitos consumidores adquiriram o SNES para jogarem o título em casa. Saiba mais.


Instalar vários aplicativos com o mesmo propósito, como editores de texto, reprodutores de músicas ou vídeos e até programas antívirus sobrecarregam o seu sistema operacional e ainda ocupam espaço desnecessário em seu HD. Tenha apenas um bom programa para cada função.