Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Uso de arrow function no Module Pattern

A atividade na aula propõe o seguinte código para criar uma classe por Module Pattern

var MyClass = (function() {
  var myPrivateAttr = '';
  return class MyClass {
    // Código da classe
  }
})
// myPrivateAttr não acessível

Por acaso, existe algum efeito colateral caso usemos a sintaxe de arrow function ao invés de function()? O myPrivateAttr fica global por causa da propriedade de escopo léxico dessa sintaxe?

O código então ficaria assim

var MyClass = (() => {
  var myPrivateAttr = '';
  return class MyClass {
    // Código da classe
  }
})
// myPrivateAttr acessível?
3 respostas

Oi André, o myPrivateAttr continuaria o mesmo. A única diferença da Arrow Function nesse caso é que nela o escopo do this é léxico.

solução!

Qualquer variável declarar com var dentro de uma função ou arrow function tem escopo privado e não vaza para o escopo global. Por exemplo:

(() => {
     var nome = 'Alura';
})();

console.log(nome); // Uncaught ReferenceError: nome is not defined

O module pattern é meia boca, porque para que você ter acesso a um artefato encapsulado por ele em outro terá que usar escopo global ainda. É por isso que no módulo 3 do curso avançado você aprende a usar o sistema de módulos do ES2015 (ES6) e não precisará mais do module pattern.

Agradeço ambas as respostas. Marquei a do Flávio como solução pois é mais completa.