Izvoz objekta v modulih s pomočjo zaprtij v JavaScript

Recimo, da imamo naslednji modul:

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

Recimo, da želimo izvoziti vse tri funkcije. V tem primeru, da ne ustvarjamo odvečnih imen funkcij zunaj modula, je bolje zapisati vse funkcije v en objekt in izvesti izvoz tega objekta:

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

Ker se imena ključev in spremenljivk ujemajo, lahko objekt s funkcijami poenostavimo:

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

Lahko nadaljujemo tudi na drug način. Funkcije zapišemo v objekt takoj pri opisu funkcije, takole:

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

Podan je naslednji modul:

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

Izvozi objekt s prvih petimi funkcijami in prvima dvema spremenljivkama.