, 16 tweets, 4 min read Read on Twitter
Nessa 3ª thread sobre Closures, você aprenderá passo a passo, através de exemplos, que é possível emular dados privados em JavaScript.

Vem comigo! 👇
Essa thread faz parte de uma série sobre Closures.

Se esse conceito ainda é novo pra você, recomendo que antes de ler essa thread você veja/revise e pratique com as anteriores.

Vou deixá-las nos últimos tweets =)
Linguagens como o Java possibilitam o uso de métodos privados. Ou seja, o método só pode ser invocado através de outros métodos da mesma classe.

Não há uma forma nativa de se fazer isso em JavaScript, mas é possível emular dados privados, utilizando closures.
Primeiramente, vamos definir uma função que contém uma função e let privadas. E essa função retorna um objeto com 3 métodos:
Esse código aplica um dos Design Patterns possíveis em JavaScript, o Module Pattern.

⚠️ Esse Design Pattern está obsoleto, graças aos módulos nativos do ES6. Portanto, encare-o com fins didáticos =)

Vamos entender passo-a-passo o que está acontecendo.
1⃣ Criamos um único escopo léxico compartilhado entre 3 métodos:

🔹 counter.increment
🔹 counter.decrement
🔹 counter.value
2⃣ Esse escopo compartilhado foi criado dentro de uma IIFE - Immediately Invoked Function Expression, que é executada no momento em que é declarada (linha 11):
Perceba que esse escopo contém 2 itens privados: a let `privateCounter` e a função `changeBy`. Elas não podem ser acessadas fora da IIFE.

Apenas os métodos `increment`, `decrement` e `value` são públicos.
Esses 3 métodos são closures que compartilham o mesmo ambiente. E o escopo léxico do JavaScript permite que eles tenham acesso à let `privateCounter` e à função `changeBy` =)
Agora, vamos deixar o Module Pattern de lado e focar em outro exemplo com a mesma lógica.

Ao invés de utilizar uma IIFE, vamos declarar uma função `makeCounter` e utilizá-la para criar counters.

Observe também que o nome do método `value` foi modificado para `getValue`.
Através da invocação de `makeCounter`, vamos criar 2 counters independentes entre si. Cada um criado em espaços diferentes da memória:
Agora, cada closure guarda uma versão diferente de `privateCounter` e `changeBy`.

Então perceba que a cada vez que um dos counters é invocado, a modificação do valor da let `privateCounter` desse counter invocado não afeta o valor da let `privateCounter` do outro:
Ou seja, através de closures, conseguimos ocultar e encapsular dados da nossa aplicação 🎉
Acha que esse conteúdo pode ajudar + pessoas❓

👉Retweeta👈 essa thread!

Para facilitar, linkei ela ali em baixo =)

Te vejo na próxima 🔥
🔗Introdução à Closures - Parte 1:


🔗Introdução à Closures - Parte 2:
Missing some Tweet in this thread?
You can try to force a refresh.

Like this thread? Get email updates or save it to PDF!

Subscribe to Roger Melo 💻
Profile picture

Get real-time email alerts when new unrolls are available from this author!

This content may be removed anytime!

Twitter may remove this content at anytime, convert it as a PDF, save and print for later use!

Try unrolling a thread yourself!

how to unroll video

1) Follow Thread Reader App on Twitter so you can easily mention us!

2) Go to a Twitter thread (series of Tweets by the same owner) and mention us with a keyword "unroll" @threadreaderapp unroll

You can practice here first or read more on our help page!

Follow Us on Twitter!

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just three indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member ($3.00/month or $30.00/year) and get exclusive features!

Become Premium

Too expensive? Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal Become our Patreon

Thank you for your support!