Skip to content

Closures – O que são e como funcionam?

Usar closures não é só para que possamos escrever menos código, ajuda também na redução da complexidade para que nosso código possua funcionalidades avançadas, as quais sem closures dificilmente conseguiríamos dada sua complexidade.

O que é e como funciona uma Closure?

Quando uma função é declarada, é criado um escopo que permite à função a acessar e manipular váriaves externas a ela, esse escopo criado é chamado de closure. Ou seja, uma closure permite que uma determinada função acesse outras funções e também variáveis, desde que estas estejam no mesmo escopo da closure.

Vejamos o seguinte exemplo:

var varExterna = 'valor externo',
    funcaoInterna;

function funcaoExterna() {
  var varInterna = 'valor interno';

  function interna() {
    console.log('Variável acessada: ', varExterna);
    console.log('Variável acessada: ', varInterna);
  }

  funcaoInterna = interna;
}

funcaoExterna();
funcaoInterna();

//Saída da execução:
//Variável acessada: valor externo
//Variável acessada: valor interno

Vamos analisar o funcionamento do código acima e ver como uma closure funciona na prática:

Temos duas funções declaradas, funcaoExterna e interna. A primeira, pertence ao escopo global, ou seja, podemos invocá-la de qualquer lugar de nosso código.
Mas e a segunda função que está dentro da funcaoExterna, como podemos chama-la?
No código, ambas são chamadas em sequência e funcionam perfeitamente. Como? Mágica? Não, closures! Embora a função interna ter sido declarada dentro da funcaoExterna, no final, atribuimos sua referência para uma referência do escopo global, ou seja, a variável funcaoInterna. Isso nos permite que a função seja executada sem nenhum problema, mesmo que o escopo da funcaoExterna já tenha sido destruído e não está mais disponível. Portanto, nesse código, declarar interna dentro da funcaoExterna, não foi apenas uma declaração definida, foi criada uma closure e com isso temos uma execução que abrange a declaração da função e todas as variáveis que estão no mesmo escopo no momento da execução. Ou seja, mesmo ela tendo sido executada após o escopo da função externa ter desaparecido, ela possui acesso ao escopo no qual ela foi criada por meio da closure.

Resumindo, closures criam uma espécie de “bolha” para as funções e variáveis que estão no escopo no momento da declaração a fim de garantir que a função tenha tudo que for necessário para que seja executada.

Published inUncategorized

2 Comments

  1. Excelente conteúdo. Porém, sabe onde encontro um artigo de migração do EcMa clássico para o 2015?

    • raphaellima raphaellima

      Olá, Luis.

      Obrigado pelo feedback!

      Não entendi muito bem sua pergunta. Você procura um exemplo de closure usando ES6?

Comments are closed.