Eksport obiektu w modułach poprzez domknięcia w JavaScript

Załóżmy, że mamy następujący moduł:

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

Załóżmy, że chcemy wyeksportować na zewnątrz wszystkie trzy funkcje. W tym przypadku, aby nie tworzyć na zewnątrz modułu zbędnych nazw funkcji, lepiej zapisać wszystkie funkcje w jednym obiekcie i wykonać eksport tego obiektu:

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};
})();

Ponieważ nazwy kluczy i zmiennych są takie same, obiekt z funkcjami można uprościć:

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

Można pójść też inną drogą. Będziemy zapisywać funkcje w obiekcie od razu przy opisie funkcji, w ten sposób:

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

Dany jest następujący moduł:

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');
  }
})();

Wyeksportuj na zewnątrz obiekt z pierwszymi pięcioma funkcjami i pierwszymi dwiema zmiennymi.