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

Извезете објекат са првих пет функција и прве две променљиве.