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?
ENIAC
O ENIAC, primeiro computador valvulado do mundo, possuía 17.000 válvulas, 500.000 pontos de solda, 30 toneladas de peso e ocupava uma área de 180 metros quadrados. Clique aqui e conheça mais sobre a história dos computadores.
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.
Space Invaders
A partida mais longa do clássico Space Invaders durou incríveis 38 horas e 32 minutos e esta façanha foi conseguida por um jogador de apenas 12 anos! O jogo, claro, podia ser pausado para alimentação e descanso, mas ainda assim o recorde, estabelecido no dia 02/09/1980, ainda não foi quebrado. Saiba mais.
Pac Man
Apenas no ano de 1982, o clássico Pac Man vendeu mais de 400 mil máquinas de fliperama em todo o mundo e recebeu cerca de 7 bilhões de moedas nestas máquinas. Saiba mais.
Tetris
O título Tetris detém o recorde de jogo mais adaptado de todos os tempos. No total foram mais de 60 plataformas diferentes que receberam alguma versão do quebra-cabeças criado por Alexey Pajitnov. Conheça mais sobre este incrível jogo clicando aqui.










