즉시 호출 함수 표현식으로, 정의와 동시에 즉시 실행되는 함수를 말한다.
require 함수도 호출되는 즉시 실행된다.
Node.js에서 require 함수는 일반적으로 외부의 모듈을 불러올 때 사용된다.
자바스크립트는 자바스크립트 파일 하나가, 하나의 모듈이다.
그리고 Node.js가 이 모듈을 로드할 때, **'Module wrapper function'**이라는 함수로 모듈 내의 전체 코드를 감싸주는 작업을 하게 된다 .
'Module wrapper function' 의 형태
(function (exports, require, module, __filename, __dirname) {
// 모듈 코드
});
여기서,
exports 객체와 module.exports(module 객체의 exports 프로퍼티)가 가리키는 객체는 '동일한' 객체이다.
모듈 내부의 것들을 외부로 공개하기 위해 exports나 module.exports를 쓰는 것은 이 객체에 접근하기 위해서이고, 바로 이 객체가 다른 모듈에서 require 함수로 이 모듈을 로드할 때 리턴되는 객체 이다.
JSpractice.js라는 파일에서 내부 모듈을 export를 통해 내보내고