Closures em Javascript


Nesse novo artigo, tratarei das Closures, também conhecidas como funções de "Fechamento", as quais têm a possibilidade de armazenar valores internos mesmo após terem sido executadas. O que dá, aos desenvolvedores, possibilidade imensas ao criar lógica para seu código.

O Javascript, assim como outras linguagens de programação, utiliza o chamado "Escopo Léxico". E do que se trata isso de nome tão complicado e difícil de lembrar? Bom, em resumo, significa que variáveis e funções que estejam fora de um determinado escopo, ou seja, fora de uma função ou de um loop, por exemplo, podem ser acessadas por esses.

Na prática é algo como isso:

Ou seja, a função increment tem acesso à variável num, pois ela se encontra fora do escopo da função. Dessa forma, ela consegue incrementar o valor informado, no exemplo o número 20, ao valor 10 da variável num, retornando o número 30 como resultado da adição.

Já o contrário não é possível. Você não conseguiria acessar a variável inc ou qualquer outra que estivesse sido declarada dentro da função increment, fora desta.

Outro exemplo:
Ao utilizar Closures em Javascript, é possível guardar o resultado de variáveis dentro de funções que podem ser manipuladas em seguida e trazidas para um novo contexto, sem perder o estado delas.

É um pouco complicado de entender mesmo, mas vou tentar utilizar um exemplo prático para ficar mais fácil.

No exemplo abaixo, podemos ver como utilizar Closures para criar um contador simples, onde cada vez que a função é chamada, ele aumenta o valor da variável contador em 1.
Um outro exemplo mais simples ou trivial seria:
Uma analogia utilizada para entender de forma mais simples as Closures é a analogia da mochila.
Quando se cria uma função, a mesma traz consigo as variáveis em seu escopo dentro de uma  "mochila", então quando você executa essa função, ela vai lidar com essas variáveis e tudo o que fizer dentro dela, vai ser mantido e atualizado junto. 

Pois as Closures são nada mais do que uma coleção de variáveis dentro de um escopo no momento em que a função é criada.
Próximo
«Anterior
Anterior
Próximo Post »
0 Comentar