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
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
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ê?
varnã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
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.
Você Sabia?
Ultima Online
Criar um jogo é muito mais complexo do que parece. São milhares, às vezes, milhões de linhas de código. Isso não é exagero! Apenas o jogo Ultima Online possui 6.006.313 linhas de programação, totalizando 25.103.295 palavras
PDP-1
O primeiro computador a conseguir rodar o jogo Spacewar era o PDP-1, que custava 120 mil dólares e pertencia ao Massachusetts Institute of Technology. O jogo demorou 200 horas para ser desenvolvido, em 1962, e seu criador foi um cientista da computação chamado Steve Russel.
Inteligência artificial
O primeiro jogo a fazer uso de uma Inteligência Artificial foi o Mouse in the Maze, criado em 1955, na União Soviética. Você pode saber mais sobre ele clicando aqui.
Asteroids
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.
Street Fighter 2
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.










