Модули через замыкания в JavaScript

Описанная выше проблема характерна для любого языка программирования. В качестве решения применяют так называемые модули.

Модуль представляет собой некую конструкцию, сделанную так, чтобы переменные и функции этой конструкции были видны только внутри нее и не мешали никому снаружи.

В JavaScript существуют несколько типов модулей. Самые простые модули через замыкания создаются с помощью вызова функции на месте, вот так:

javascript;(function() {
  // тут код модуля
})();

Переменные и функции, созданные в таком модуле, не будут видны снаружи этого модуля:

javascript;(function() {
  let str = 'переменная модуля';
  
  function func() {
    alert('функция модуля');
  }
})();

// Тут переменные и функции модуля недоступны:
alert(str);
alert(func);