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