Aguarde...

7 de abril de 2019

Entendendo os Closures no JavaScript

Entendendo os Closures no JavaScript

Na verdade, é muito mais simples do que outros tutoriais estão tentando lhe dizer

O fechamento do JavaScript é um desses tópicos que podem ser difíceis de entender, simplesmente porque é explicado com frequência. A maioria dos tutoriais apenas informa que é uma função dentro de uma função – mas, na realidade, há um significado mais profundo por trás de tudo.

“Escrever na linguagem ECMAScript sem entender o fechamento é como escrever Java sem entender as classes” – Douglas Crockford, pai do JSON

Vamos ver o código abaixo:

Entendendo os Closures no JavaScript
um pequeno pedaço de código

No entanto, o código acima não é muito eficiente. Ele usa um escopo global e não há nada para protegê-lo contra mudanças.

Muitas pessoas esquecem que o JavaScript é uma linguagem de escopo léxico. Isso significa que a herança flui para dentro. Uma variável fora de uma função está disponível para uso dentro de uma função, mas não o contrário.

Você não pode usar um valor que tenha sido declarado dentro de uma função fora dele.

O código abaixo é um encerramento porque x é uma variável que está fora da função.

Entendendo os Closures no JavaScript
A função tradicional dentro de um exemplo de estrutura de fechamento de função
Entendendo os Closures no JavaScript
Prova de que x é um encerramento no console do navegador

No entanto, a questão torna-se então – se o fechamento é o consumo de uma variável fora da função, por que o código a seguir não é um fechamento?

Entendendo os Closures no JavaScript

O acima não é um encerramento por causa de como o JavaScript avalia a instrução. O escopo da função é criado uma vez e a memória é alocada para ele. O processamento acontece até chegar ao final da função e a memória é liberada. Não há permanência ganha no exercício e qualquer valor criado é perdido para sempre.

Entendendo os Closures no JavaScript
Não é um encerramento porque o escopo da variável não é externo à função.

No entanto, se você agrupar sua função em uma função, ela criará outro escopo – uma espécie de fence em torno de seu código que diz ao JavaScript para não destruir sua função quando ela terminar.

A variável de contador no código abaixo torna-se a variável incluída porque está fora da função que está sendo chamada (ou seja, Incremento). Como resultado, você pode criar um número ilimitado de instâncias de função com seu próprio conjunto de valores exclusivos.

Entendendo os Closures no JavaScript

contador de variáveis é, portanto, o fechamento no snippet de código acima.

De certa forma, os encerramentos são apenas funções com dados preservados. Quando você cria um fechamento, você está dizendo ao JavaScript para lembrar o estado das coisas dentro de sua função – e somente as variáveis ​​que são usadas são consideradas ‘fechamentos’.

Isso é particularmente útil porque encerramentos são funções com estado em que eles lembram seus dados de variáveis ​​privadas após uma chamada. As variáveis ​​são privadas porque as funções externas não podem acessá-las com uma chamada explícita para acesso. Isso permite que toda a função seja autônoma e que suas variáveis ​​sejam protegidas contra alterações indesejadas.

Entendendo os Closures no JavaScript
Escopo Lexical no trabalho.

Fechamentos em JavaScript são, portanto, uma maneira de resumir sucintamente o código em uma maneira modular e independente, sem a necessidade de criar explicitamente uma classe. O uso de closures permite replicabilidade no código e reduz a quantidade de escopos globais necessários.

Escrever fechamentos é mais do que apenas o ato de colocar uma função dentro de outra função. É a técnica usada para criar variáveis ​​protegidas contra alterações externas, verdadeiramente isoladas do restante do aplicativo e com persistência de estado.

Postado em BlogTags:
Escreva um comentário