즉시 실행 함수 (Immediately Invoked Function Expression)은 정의되자마자 즉시 실행되는 함수이다.
IIFE를 변수에 할당하면 IIFE 자체는 저장되지 않고, 함수가 실행된 결과만 저장된다.
사실 IIFE는 클로저를 활용한 패턴이다.
IIFE가 모두 클로저인 것은 아니고, 비공개 변수를 가질 수 있는 환경에 있는 함수가 클로저이다.
비공개 변수는 클로저 함수 내부에 생성한 변수도 아니고, 매개변수도 아닌 변수를 의미한다.
비공개변수는 클로저 함수의 매개변수도 아니고, 클로저 함수 내부에서도 생성한 변수가 아닌 변수를 뜻하고 "자유 변수"라고도 불린다.
비공개변수는 비공개이기 떄문에, 남들이 조작할 걱정이 없다. 프로그램 사용자가 예상을 뒤엎는 행동을 하는 것을 막을 수 있다.
(항상 사용자를 믿어서는 안되니까..)
즉, 항상 사용자가 할 수 있는 모든 행동과 일어날 수 있는 경우의 수를 통제하고 있어야 한다.
자바스크립트에서 사용자를 통제하기. 위한 기본적인 방법이 바로 클로저이다.
단점으로는, 잘못 사용했을 시, 성능 문제와 메모리 문제가 발생할 수 있다.
클로저의 비공개 변수는 자바스크립트에서 언제 메모리 관리를 해야할 지 모르기 때문에, 자칫 메모리 낭비로 이어질 수 있다.
또한, 스코프 체인을 거슬러 올라가는 행동을 하기 때문에 조금 느리다.
어떠한 스코프나 컨텍스트가 하나 주어져있으면, 그 안에 들어 있는 함수는 모두 클로저이다.
자바스크립트 내에 있는 모든 함수는 window 스코프에 대한 클로저라고 할 수 있다.
'개발 > FrontEnd Interview' 카테고리의 다른 글
Promise란 무엇이고, 왜 등장하게 되었는가 (0) | 2021.04.09 |
---|---|
마이크로 태스크 큐란? (0) | 2021.04.08 |
함수형 프로그래밍? 순수 함수? (0) | 2021.04.06 |
명령형? 선언형? 프로그래밍 방식 (4) | 2021.04.06 |
css 값이 0일때 단위를 붙이지 말아야 하는 이유 (0) | 2021.04.06 |