Експорт на обект в модули чрез затваряния в JavaScript

Да предположим, че имаме следния модул:

javascript;(function() {
  function func1() {
    alert('module function');
  }
  function func2() {
    alert('module function');
  }
  function func3() {
    alert('module function');
  }
})();

Да предположим, че искаме да експортираме навън и трите функции. В този случай, за да не създаваме извън модула излишни имена на функции, е по-добре да запишем всички функции в един обект и да извършим експорт на този обект:

javascript;(function() {
  function func1() {
    alert('module function');
  }
  function func2() {
    alert('module function');
  }
  function func3() {
    alert('module function');
  }
  
  window.module = {func1: func1, func2: func2, func3: func3};
})();

Тъй като имената на ключовете и променливите съвпадат, обектът с функции може да се опрости:

javascript;(function() {
  function func1() {
    alert('module function');
  }
  function func2() {
    alert('module function');
  }
  function func3() {
    alert('module function');
  }
  
  window.module = {func1, func2, func3};
})();

Може да се поеме и по друг начин. Ще записваме функциите в обекта веднага при дефинирането им, ето така:

javascript;(function() {
  let module = {};
  
  module.func1 = function() {
    alert('module function');
  }
  module.func2 = function() {
    alert('module function');
  }
  module.func3 = function() {
    alert('module function');
  }
  
  window.module = module;
})();
Задание 1

Даден е следният модул:

javascript;(function() {
  let str1 = 'module variable';
  let str2 = 'module variable';
  let str3 = 'module variable';
  
  function func1() {
    alert('module function');
  }
  function func2() {
    alert('module function');
  }
  function func3() {
    alert('module function');
  }
  function func4() {
    alert('module function');
  }
  function func5() {
    alert('module function');
  }
})();

Експортирайте навън обект с първите пет функции и първите две променливи.