Экспарт аб'екта ў модулях праз замыканні ў JavaScript

Няхай у нас ёсць наступны модуль:

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

Няхай мы хочам экспартаваць вон усе тры функцыі. У гэтым выпадку, каб не плодзіць вон модуля лішніх імёнаў функцый, лепш запісаць усе функцыі ў адзін аб'ект і выканаць экспарт гэтага аб'екта:

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

Так як імёны ключоў і зменных супадаюць, то аб'ект з функцыямі можна спрасьціць:

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

Можна пайсці і іншым шляхам. Будзем запісваць функцыі ў аб'ект адразу пры апісанні функцыі, вось так:

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

Дадзены наступны модуль:

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

Экспартуйце вон аб'ект з першымі пяццю функцыямі і першымі двума зменнымі.