원티드 강의를 듣다가 처음 접하게 된 즉시 실행 함수 , IIFE(Immediately Invoked Function Expression)
IIFE는 즉시 실행되는 함수 표현식의 약자이다.
let fun = function() {
console.log('실행 됨')
};
fun();
이렇게 정의된 함수는 호출해주지 않으면 실행되지 않는 함수이다.
이와 다르게 즉시 실행함수는 아래와 같이 입력하면 바로 실행이 된다.
(function write() {
console.log('즉시 실행')
}());
보통 함수와의 차이점이라고 하면 함수 리터럴()로 감싼 형태라는 것이다.
소괄호로 감싸지 않는다면 함수 선언문으로 인지된다.
함수 리터럴은 function 키워드, 함수 이름, 함수 본문, 파라미터 리스트로 구성되어있다.
위 함수 fun 과 같이 이름이 정의되어 있는 함수들과 달리 즉시 실행함수는 이 네가지의 요소 중 '함수 이름'이 누락되어 있다.
보통의 경우에는 함수 이름이 누락되어 있으면 에러가 발생하지만 함수를 할당받을 변수를 지정하거나 함수를 즉시 호출하는 경우에는 오류없이 정의할 수 있다.
즉시 실행함수는 전역 영역을 오염시키지 않기 위해서 사용된다.
아래의 외부 스코프에서 직접 접근할 수 없다는 장점을 살려 적합하지 않은 곳에서 재 호출이 되는 '실수'를 방지하기 위해 사용된다.
즉시실행함수의 장점은 아래와 같다
1. 캡슐화
외부 스코프에서 직접 접근할 수 없는 변수를 생성하여 정보 은닉과 캡술화를 제공한다
2. 즉시실행
함수가 선언되자마자 실행되므로 한번만 실행되는 초기화 코드를 간편하게 작성할 수 있다
3. 스코프 제한
외부 스코프에서 접근할 수 없어 변수 이름 충돌을 방지하고 코드 모듈화를 촉진하는데 도움이 된다.
하지만 함수의 내용을 디버깅 하기 전에 함수가 실행되어 버릴 수 있기 때문에 디버깅의 어려움이 있고, 가독성이 저하될 수 있다는 단점도 있다.
특히 ES6( let, const 키워드)의 등장으로 IIFE의 필요성은 줄었다고 한다.
하지만 캡슐화가 필요한 부분에서는 종종 유용하게 사용될 것 같다
참고
'junior developer :) > JS_JavaScript' 카테고리의 다른 글
조건문 체크하기_삼항연산자 , 논리연산자(??, !, !!, &&) (1) | 2023.12.29 |
---|---|
[js]식 문 값(표현식, 명령문) (2) | 2023.11.28 |
생성자 함수_new (with.모던 자바스크립트 deep dive) (3) | 2023.08.03 |
이벤트 버블링에 대해서 (이벤트 버블링, 이벤트 캡쳐링, 이벤트 위임) (3) | 2023.07.25 |
객체 배열의 중복 제거 (filter, findLastIndex 메서드) (0) | 2023.02.17 |