즉시실행함수(Immediately Invoked Function Expression)은 정의되자마자 즉시 실행되는 함수이다.
(function () {
statements
})();
//화살표 함수일 경우
(() => {
statements
})();
즉시실행함수는 다음과 같이 소괄호로 함수를 감싸서 실행하는 문법이다.
즉시실행함수에 이름을 붙일 순 없을까 ?
: 즉시실행함수에도 이름을 붙여 사용할 수 있지만, 선언과 동시에 호출되어 반환되면 재사용을 할 수 없기 때문에 이름ㅇ르 지어주는 것이 의미가 없다.
전역변수를 사용하면
- 모든 코드에서 전역변수를 참조하고, 변경하기 때문에 상태 변경의 위험성이 높다.
- 생명주기가 어플리케이션의 생명주기와 동일하므로 메모리 리소스 소비기간이 길고, 상태 변경에 의한 오류발생 확률이 높다.
- 스코프 체인 상에서 종점에 존재하기 때문에 가장 마지막에 검색된다. 즉, 검색 속도가 가장 느리다.
- 다른 파일 내에서 동일한 이름으로 전역 변수나 전역 함수를 재할당 할 경우 예상치 못한 결과를 가져올 수 있다.
전역변수는 이런 문제점이 있으므로 사용을 하지 않는것이 좋다.
즉시실행함수는 외부에서 접근할 수 없는 자체적인 스코프를 가지게 된다. 이는 클로저의 사용 목적과도 비슷하며 내부 변수를 외부로부터 private하게 보호할 수 있다는 장점이 있다.
아래 함수는 즉시실행되는 함수 표현이다. 표현 내부의 변수는 외부로부터의 접근이 불가능하다.
(function){
const aName = "Barry";
})();
//IIFE 내부에서 정의된 변수는 외부 범위에서 접근이 불가능하다.
aName //throws "Uncaught ReferenceError : aName is not defined"
IIFE를 변수에 할당하면 IIFE 자체는 저장되지 않고, 함수가 실행된 결과만 저장한다.
const result = (function() {
const name = "Barry";
return name;
})();
//즉시 결과를 생성한다.
result; //"Barry"