Exportación de objetos en módulos mediante closures en JavaScript

Supongamos que tenemos el siguiente módulo:

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

Supongamos que queremos exportar las tres funciones. En este caso, para no multiplicar nombres de funciones innecesarios fuera del módulo, es mejor guardar todas las funciones en un objeto y exportar este objeto:

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

Dado que los nombres de las claves y las variables coinciden, el objeto con las funciones se puede simplificar:

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

También se puede seguir otro camino. Guardaremos las funciones en el objeto directamente al definirlas, de esta manera:

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

Se da el siguiente módulo:

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

Exporta un objeto con las primeras cinco funciones y las dos primeras variables.