JavaScriptFunçõesintermediario

Closure

Em código real, closures são essenciais para criar dados privados e evitar poluição do escopo global. Por exemplo, em bibliotecas JavaScript ou em funções de temporizador, closures permitem que uma função 'lembre' de variáveis do escopo onde foi definida, mesmo após esse escopo ter sido encerrado. Dominar esse padrão ajuda a escrever código mais modular e seguro, como contadores independentes ou manipuladores de eventos que precisam de estado interno.

O PROBLEMA

Crie criarContador() que retorna uma função. Cada chamada incrementa e retorna o contador.

EXEMPLO

const contador = criarContador();
contador() → 1
contador() → 2
contador() → 3

SOBRE O CONCEITO

Closure é a combinação de uma função com seu escopo léxico. No exercício, criarContador() define uma variável local count e retorna uma função interna que acessa e modifica count. A função interna forma uma closure, preservando o valor de count entre chamadas. Um erro comum é usar uma variável global (ex: let count = 0 fora de criarContador). Isso quebra o encapsulamento, pois qualquer parte do código pode alterar count, comprometendo o isolamento do contador. Outro erro é não retornar a função interna, fazendo com que criarContador() retorne undefined em vez de uma função executável. A função interna deve ser retornada para que seja chamada repetidamente, incrementando o contador privado.

RESOLUÇÃO

Mais exercícios de Funções

JSF019 · IntermediárioComposição de funçõesJSF020 · IntermediárioIIFEJSF022 · AvançadoGenerator functionJSF023 · AvançadoFunção pura vs impura
Ver todos os exercícios de JavaScript