Exportação de objeto em módulos através de closures em JavaScript

Suponha que temos o seguinte módulo:

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

Suponha que queremos exportar as três funções para fora. Neste caso, para não criar fora do módulo nomes extras de funções, é melhor registrar todas as funções em um objeto e realizar a exportação desse 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};
})();

Como os nomes das chaves e das variáveis coincidem, o objeto com as funções pode ser simplificado:

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

Podemos seguir por outro caminho. Vamos registrar as funções no objeto logo na descrição da função, assim:

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

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

Exporte para fora um objeto com as primeiras cinco funções e as duas primeiras variáveis.