0

Como criar funções com memoria (closures)

#JavaScript
Lucio Almeida
Lucio Almeida

Funções são tudo de bom, são simples e ajudam a organizar o codigo. Infelizmente elas não possuem memoria, pelo menos não uma sozinha!

Se você tentar criar a função abaixo, que retorna o numero de vezes em que foi chamada, ela sempre retornara 1. Isso acontece por que a variavel contador é criada novamente toda vez que a função é chamada.


function quantasVezesFuiChamado() {
  let contador = 0;
  contador += 1;

  return contador;
}

quantasVezesFuiChamado(); //1
quantasVezesFuiChamado(); //1


Okay, você poderia resolver isso criando uma variavel contador global, mas essa pode nem sempre ser a melhor pratica.

Como resolver essa questão então? Bem, se uma função sozinha não tem memoria, que tal usarmos duas?


function criaContador() {
  let contador = 0;
  
  return function () {
    contador += 1;

    return contador;
  }
}

let quantasVezesFuiChamado = criaContador();

quantasVezesFuiChamado(); //1
quantasVezesFuiChamado(); //2
quantasVezesFuiChamado(); //3


O que criamos aqui é uma clozure: Uma função pai contem a variavel que queremos manter, e retorna uma função filha que aponta para essa variavel local. Com essa tecnica conseguimos criar um valor que vai ser mantido pela função filha e que só pode ser acessado por ela.


Se estiver se perguntando como isso pode ser util, não é o unic@, escrevi esse artigo por que estava resolvendo um problema e usar uma closure foi a solução que precisava.

Se quiser dar uma olhada nesse exemplo, mais complexo, pode entrar aqui.


Obrigado pela leitura :)

0
7

Comentários (1)

0
I

Ingryd Gularte

30/06/2021 22:35

Olá querido! Obrigada por essa excelente explicação! Tu dominas isso de uma forma muito legal e divertida!


Espero ler mais artigos seus por aqui 🥰❤

Dev Frontend e estudante de Engenharia de Software

Brasil