Módulos via Closures em JavaScript

O problema descrito acima é característico de qualquer linguagem de programação. Como solução, são utilizados os chamados módulos.

Um módulo é uma construção feita de modo que as variáveis e funções dessa construção sejam visíveis apenas dentro dele e não interfiram em nada externamente.

Em JavaScript, existem vários tipos de módulos. Os módulos via closures mais simples são criados usando uma função imediatamente invocada (IIFE), assim:

javascript;(function() {
  // código do módulo aqui
})();

Variáveis e funções criadas dentro de tal módulo não serão visíveis fora dele:

javascript;(function() {
  let str = 'variável do módulo';
  
  function func() {
    alert('função do módulo');
  }
})();

// Aqui as variáveis e funções do módulo não estão acessíveis:
alert(str);
alert(func);