Экспорт переменных и функций в модулях через замыкания в JavaScript

Иногда нужно сделать так, чтобы некоторые переменные и функции модуля были доступны снаружи. Давайте посмотрим, как это делается. Пусть у нас есть следующий модуль:

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

Давайте экпортируем нашу функцию func. Для этого запишем ее в свойство встроенного в браузер объекта window:

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

Теперь мы можем вызвать нашу функцию снаружи модуля:

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

window.func(); // выведет 'функция модуля'

При этом не обязательно вызывать функцию как свойство объекта window:

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

func(); // выведет 'функция модуля'
Задание 1

Дан следующий модуль:

javascript;(function() {
  let str1 = 'переменная модуля';
  let str2 = 'переменная модуля';
  let str3 = 'переменная модуля';
  
  function func1() {
    alert('функция модуля');
  }
  function func2() {
    alert('функция модуля');
  }
  function func3() {
    alert('функция модуля');
  }
})();

Экспортируйте наружу одну из переменных и две любые функции.