O que são fechamentos em JavaScript e como eles funcionam?



Fechamentos em JavaScript são criados toda vez que uma função é criada, no momento da criação da função. Ele fornece melhor controle sobre o código ao usá-los.

é uma linguagem orientada a funções que dá muita liberdade ao usuário. Você pode criar uma função dinamicamente, copiá-la para outra variável ou passar como um argumento para outra função e chamar de um lugar diferente posteriormente. Fechamentos em JavaScript são criados toda vez que uma função é criada, no momento da criação da função. Neste artigo, entenderemos os fechamentos na seguinte sequência:

Introdução a fechamentos em JavaScript

Um fechamento é uma combinação de um função agrupados com referências ao seu estado circundante, ou seja, o ambiente lexical. Em outras palavras, um fechamento fornece acesso de uma função interna ao escopo de uma função externa.





codificador - fechamentos em javascript - edureka

A maioria dos desenvolvedores usa encerramentos em JavaScript de forma consciente ou inconsciente. Ele fornece melhor controle sobre o código ao usá-los. Além disso, é a pergunta mais frequente durante qualquer .



Exemplo:

function foo () {var x = 10 function inner () {return x} return inner} var get_func_inner = foo () console.log (get_func_inner ()) console.log (get_func_inner ()) console.log (get_func_inner ())

Resultado:

10
10
10



Aqui, você pode acessar o variável x que é definido na função foo () por meio da função inner (), pois a última preserva a cadeia de escopo da função envolvente no momento da execução da função envolvente. Assim, a função interna conhece o valor de x através de sua cadeia de escopo. É assim que você pode usar encerramentos em JavaScript.

Encerramentos Práticos

Os fechamentos permitem que você associe o ambiente léxico a uma função que opera nesses dados. Isso tem paralelos óbvios com programação orientada a objetos , onde os objetos nos permitem associar as propriedades do objeto a um ou mais métodos.

binário para decimal em java

Conseqüentemente, você pode usar um encerramento em qualquer lugar onde normalmente usaria um objeto com apenas um único método.

Exemplo:

function makeSizer (size) {return function () {document.body.style.fontSize = size + 'px'}} var size12 = makeSizer (12) var size14 = makeSizer (14) var size16 = makeSizer (16)

O exemplo acima é geralmente anexado como um retorno de chamada: uma única função que é executada em resposta ao evento.

Cadeia de escopo

Fechamentos em JavaScript têm três escopos, como:

  • Escopo Local
  • Escopo de funções externas
  • Âmbito global

Um erro comum é não perceber que, no caso em que a função externa é ela própria uma função aninhada, o acesso ao escopo da função externa inclui o escopo delimitador da função externa, criando efetivamente uma cadeia de escopos de função.

// escopo global var x = 10 função soma (a) {função de retorno (b) {função de retorno (c) {// escopo de funções externas retornar função (d) {// retorno do escopo local a + b + c + d + x}}}} console.log (sum (1) (2) (3) (4)) // log 20

Também pode ser escrito sem funções anônimas:

// escopo global var x = 10 função sum (a) {retornar função sum2 (b) {retornar função sum3 (c) {// funções externas escopo retornar função sum4 (d) {// escopo local retornar a + b + c + d + x}}}} var s = soma (1) var s1 = s (2) var s2 = s1 (3) var s3 = s2 (4) console.log (s3) // log 20

No exemplo acima, há uma série de funções aninhadas, todas com acesso ao escopo externo de uma função. Assim, você pode dizer que os encerramentos têm acesso a todos os escopos de função externos dentro dos quais foram declarados.

Fechamento dentro de um loop

Você pode usar closures em JavaScript para armazenar uma função anônima em cada índice de um matriz . Vamos dar um exemplo e ver como os fechamentos são usados ​​em um loop.

Exemplo:

função externa () {var arr = [] var i para (i = 0 i<3 i++) { // storing anonymus function arr[i] = function () { return i } } // returning the array. return arr } var get_arr = outer() console.log(get_arr[0]()) console.log(get_arr[1]()) console.log(get_arr[2]())

Resultado:

3
3
3
3

Com isso, chegamos ao final do nosso artigo. Espero que você tenha entendido como funcionam os encerramentos em JavaScript e como são usados ​​para obter um melhor controle do código.

exemplos de programas Java applet com saída

Agora que você sabe sobre closures em JavaScript, confira o por Edureka. O Treinamento de Certificação de Desenvolvimento Web ajudará você a aprender como criar sites impressionantes usando HTML5, CSS3, Twitter Bootstrap 3, jQuery e APIs do Google e implementá-lo no Amazon Simple Storage Service (S3).

Tem alguma questão para nós? Mencione isso na seção de comentários de “Closures in JavaScript” e entraremos em contato com você.