클로저를 통한 JavaScript 모듈에서 객체 내보내기
다음 모듈이 있다고 가정해 봅시다:
;(function() {
function func1() {
alert('module funcion');
}
function func2() {
alert('module funcion');
}
function func3() {
alert('module funcion');
}
})();
세 함수를 모두 외부로 내보내고 싶다고 가정해 보겠습니다. 이 경우, 모듈 외부에 불필요한 함수 이름을 생성하지 않기 위해, 모든 함수를 하나의 객체에 저장하고 이 객체를 내보내는 것이 더 좋습니다:
;(function() {
function func1() {
alert('module funcion');
}
function func2() {
alert('module funcion');
}
function func3() {
alert('module funcion');
}
window.module = {func1: func1, func2: func2, func3: func3};
})();
키 이름과 변수 이름이 일치하므로, 함수가 포함된 객체를 다음과 같이 단순화할 수 있습니다:
;(function() {
function func1() {
alert('module funcion');
}
function func2() {
alert('module funcion');
}
function func3() {
alert('module funcion');
}
window.module = {func1, func2, func3};
})();
다른 방법도 있습니다. 함수를 정의할 때 바로 객체에 함수를 기록할 수 있습니다. 다음과 같이 말이죠:
;(function() {
let module = {};
module.func1 = function() {
alert('module funcion');
}
module.func2 = function() {
alert('module funcion');
}
module.func3 = function() {
alert('module funcion');
}
window.module = module;
})();
다음 모듈이 주어졌습니다:
;(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');
}
})();
처음 다섯 개의 함수와 처음 두 개의 변수를 포함하는 객체를 외부로 내보내세요.