Експорт на објект во модули преку затворања во 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');
  }
})();

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