Atalhos de JavaScript: um guia básico

Apresentando sua atenção está a tradução de um artigo de Parathan Thiyagalingam publicado em medium.freecodecamp.org. Deseja saber como funcionam os fechamentos de JavaScript? Olhe embaixo do gato!


Foto Austin Distel com Unsplash

Um fechamento é uma combinação de todas as variáveis ​​no escopo no momento em que a função é criada. Para usar o fechamento, você precisa criar uma função aninhada, ou seja, uma função dentro da função. A função interna terá acesso a variáveis ​​no escopo da função externa, mesmo após a conclusão da função externa. (É o fechamento que fornece esse acesso.) Cada vez que uma função é criada, o fechamento é criado.

Antes de começar a entender o conceito de fechamento, considere quais são as cadeias de escopo no JavaScript.

Como regra, existem dois tipos de áreas de visibilidade: global e local.

No JavaScript, uma variável dentro de uma função não é acessível externamente - diferente de, por exemplo, variáveis ​​dentro de um bloco (em condições como if e while ).

Com base nisso, uma função em JavaScript tem um escopo, mas um bloco não.

 var a = 10; function app(){ var b = 2; console.log(a); // 10 console.log(b); // 2 } console.log(b); // ReferenceError: b is not defined app(); 

Como já sabemos, a é uma variável global eb é local, ou seja, usado apenas pela função do app . Fora do escopo local, não temos acesso à variável local.

Como usar uma função aninhada (função dentro de uma função)


 var a = 10; function app(){ var b = 2; var d = 3; function add(){ var c = a + b; } return add; } var x = app(); console.dir(x); 

No exemplo acima, app é a função pai, add é a função filho.

  • Em vez de console.log, console.dir é usado para exibir todas as propriedades do objeto selecionado.
  • A variável x é atribuída à função de app , que retorna a função de add . Isso permite que você veja todas as propriedades do objeto da função add .

Se você abrir o console em um navegador, encontrará o objeto Closure dentro da matriz de dados Scopes .



Como a função interna de add tem acesso às variáveis bec que pertencem à função externa, essas duas variáveis ​​serão adicionadas ao objeto Closure como referência.
Considere outro exemplo de fechamento.

 var a = 10; var startFunc; function app(){ var b = 2; function add(){ var c = a + b; console.log(c); } startFunc = add(); } app(); // Invoke the app function startFunc; // as the app function invoked above will assign the add function to startFunc & console the value of c 

  • A função global startFunc recebe a função add , que é filha do app funções pai.
  • Isso só é possível depois de chamar a função de aplicativo. Caso contrário, a função startFunc se comportará como uma variável global sem um valor atribuído.

Como usar fechamentos em JavaScript


Muitos de nós, usando fechamentos ao escrever código, não entendemos completamente por que fazem isso. O JavaScript não possui os modificadores públicos , protegidos e privados encontrados nas linguagens de programação orientadas a objetos. Portanto, para bloquear o acesso ao espaço de nomes para código externo, somos forçados a recorrer à ajuda de funções.

E já que estamos falando de funções - a função chamada imediatamente (IIFE) começa imediatamente após o anúncio. Ela nem precisa ser chamada.

A sintaxe IIFE é assim:

 (function(){ //variables & scope that inside the function })(); 

Considere este exemplo:

 var studnetEnrollment = (function () { //private variables which no one can change //except the function declared below. var count = 0; var prefix = "S"; // returning a named function expression function innerFunc() { count = count + 1; return prefix + count; }; return innerFunc; })(); var x = studnetEnrollment(); // S1 console.log(x); var y = studnetEnrollment(); // S2 console.log(y); 

count e prefix são duas variáveis ​​privadas que não podem ser alteradas. O acesso a eles é aberto apenas para a função interna (no nosso caso, essa é a função innerFunc ).

  • Na primeira vez que a função studentEnrollment é chamada, a função studentEnrollment aumenta o valor da variável count para 1.
  • Na segunda vez, a count aumenta de 1 para 2.
  • Tudo isso é possível apenas através do fechamento.

Conclusão


Um fechamento é um conjunto de variáveis ​​de uma função externa, devido ao qual o escopo da função interna obtém acesso a essas variáveis. Isso protege o espaço para nome global.

A funcionalidade de fechamento permite que os desenvolvedores escrevam código limpo - como em linguagens de programação orientadas a objetos, código no qual variáveis ​​globais e locais não são confusas.



Tenha uma boa codificação!

Source: https://habr.com/ru/post/pt450988/


All Articles