클로저를 통한 JavaScript 모듈에서 객체 내보내기

다음 모듈이 있다고 가정해 봅시다:

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

세 함수를 모두 외부로 내보내고 싶다고 가정해 보겠습니다. 이 경우, 모듈 외부에 불필요한 함수 이름을 생성하지 않기 위해, 모든 함수를 하나의 객체에 저장하고 이 객체를 내보내는 것이 더 좋습니다:

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

키 이름과 변수 이름이 일치하므로, 함수가 포함된 객체를 다음과 같이 단순화할 수 있습니다:

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

다른 방법도 있습니다. 함수를 정의할 때 바로 객체에 함수를 기록할 수 있습니다. 다음과 같이 말이죠:

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

다음 모듈이 주어졌습니다:

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

처음 다섯 개의 함수와 처음 두 개의 변수를 포함하는 객체를 외부로 내보내세요.