(function () { // statements })()
- 함수를 정의, 2. 변수에 함수를 저장, 3. 실행의 과정이 아닌 함수를 정의하자마자 바로 호출하는 함수
- 초기화 코드, 라이브러리 내 전역 변수의 충돌 방지 등에 사용한다.
🤔 접근 제어자
- public
클래스에 정의된 함수에서 접근 가능하며 자식 클래스와 외부 클래스에서 접근 가능한 범위- protected
클래스에 정의된 함수에서 접근 가능, 자식 클래스에서 접근 가능하지만 외부 클래스에서 접근 불가능한 범위- private
클래스에 정의된 함수에서 접근 가능하지만 자식 클래스와 외부 클래스에서 접근 불가능한 범위
const module1 = (() => {
const privateFoo = () => {};
const privateBar = [];
const exported = {
publicFoo: () => {},
publicBar: () => {},
};
return exported; //private 범위를 만들고 공개할 부분만 export 합니다.
})();
console.log(module1);
{ publicFoo : [Function: publicFoo],
publicBar : [Function: publicBar] }
const pukuba = (() => {
const a = 1
const b = () => 2
const public = {
c : 2,
d : () => 3
}
return public
})()
console.log(pukuba)
console.log(pukuba.a)
// { c: 2, d: [Function: d] }
// undefined
var myModule = (function(window, undefined) {
// private
function myMethod() {
console.log('myMethod');
}
function myOtherMethod() {
console.log('myOtherMethod');
}
return {
//public
someMethod: myMethod,
someOtherMethod: myOtherMethod
};
})(window);
myModule.myMethod(); // Uncaught TypeError: myModule.myMethod is not a function
myModule.myOtherMethod(); // Uncaught TypeError: myModule.myOtherMethod is not a function
myModule.someMethod(); // console.log('myMethod');
myModule.someOtherMethod(); // console.log('myOtherMethod');
면접을 위한 CS 전공지식 노트
노출식 모듈 패턴 Revealing Module Pattern
노출식 모듈 패턴