Fechamentos em JavaScript

Mar 07 2023
Em JavaScript, a função é um bloco de código projetado para executar uma tarefa específica. Ele é executado quando você o invoca.
Fechamentos em JavaScript

Em JavaScript, a função é um bloco de código projetado para executar uma tarefa específica. Ele é executado quando você o invoca.

Por exemplo:

function myFunction(message){
  console.log(message)
}

myFunction("Hello there!!")

myFunction("Welcome, boss")

Mas e se quisermos saber o que aconteceu na primeira execução ou na anterior. É aí que vêm os fechamentos.

O que é Closures?

Em palavras simples, quando uma função retorna outra função, que tem acesso ao escopo de suas funções externas, é referido como encerramentos em JavaScript.

Por exemplo:

function outer (){
  let counter = 0;
  function inner (){
    counter++;
    return counter;
  }
  return inner
}


const result = outer()

function inner (){
  counter++;
  return counter;
}

Então, de alguma forma, o JavaScript está lembrando o countervalor anterior e está fazendo uma operação matemática.
Você pode perguntar como Js está fazendo isso?

Quando uma função retorna uma função, não está retornando apenas a função, mas também o escopo léxico dessa função. Todas essas variáveis, dados relacionados a essa função retornada como uma propriedade oculta junto com essa função retornada. Essa propriedade oculta também chamadaBackpack

Esta mochila tem muitos nomes:

  • Fechado sobre 'Ambiente Variável' (COVE)
  • Dados Referenciados de Escopo Lexical Persistente (PLSRD)
  • Mochila
  • Fecho

Vejamos outro exemplo:

function outer (){
  let counter = 0;
  function inner (){
    counter++;
    return counter;
  }
  return inner
}

const result = outer()

result() // 1
result() // 2

const anotherResult = outer()
anotherResult() // 1
anotherResult() // 2


Por que fechamentos:

  • Isso nos ajuda a criar uma função auxiliar que permite funções poderosas como uma vez e memorizar.
  • Nos ajuda a criar Iterators e Generators usando o escopo léxico e encerramentos.
  • Muitos padrões de design JavaScript, incluindo o padrão de módulo, usam encerramento, preservando o estado de um aplicativo sem poluir o namespace global.
  • Callbacks e Promises dependem de encerramentos para persistir o estado no mundo JavaScript assíncrono.