대왕판다
ESTP 하고재비로 살아가기
대왕판다
전체 방문자
오늘
어제
  • 분류 전체보기
    • 일상
      • 먹고재비
      • 생각대로
    • 개발
      • html css
      • 자바
      • 자바스크립트
      • 파이썬
      • 알고리즘
      • 북TIL
      • 네트워크
      • 객체지향개발

블로그 메뉴

  • 홈
  • 태그

공지사항

인기 글

태그

  • 마이바티스
  • 브루트포스
  • 양산
  • 노마드코더
  • 알고리즘
  • 파이썬
  • 상길북
  • 리액트
  • 챌린지
  • 클론코딩
  • 자바
  • 백준
  • html
  • css
  • 타입스크립트
  • 양산맛집
  • 자바스크립트
  • 맛집
  • 노개북
  • 코딩

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
대왕판다

ESTP 하고재비로 살아가기

익명함수와 즉시실행함수표현(IIFE)
개발/자바스크립트

익명함수와 즉시실행함수표현(IIFE)

2022. 3. 22. 07:16

익명함수 : 함수의 이름이 생략된 함수

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Functions

차이점은 어디서 오냐면, 위에서 언급한 호이스팅의 개념에서 온다.

일반함수의 경우, 함수 전체가 전부 맨 위로 올라가므로 함수를 호출하는 위치에 상관없이 사용될 수 있다고 했다. 반면, 리터럴 방식으로 사용되는 익명 함수의 경우, 호이스팅 시 함수를 담는 변수의 선언부만 위로 올라가고, 익명 함수 자체는 변수가 호출되었을 때 실행되기 때문에, 선언부가 호출 위치보다 위에 있어야 한다. 

(티스토리 사막하는 개발여우님 블로그 - https://dev-note-97.tistory.com/273)

 


즉시실행함수

(function () {
    statements
})();

이는 Self-Executing Anonymous Function 으로 알려진 디자인 패턴이고 크게 두 부분으로 구성된다. 첫 번째는 괄호((), Grouping Operator)로 둘러싸인 익명함수(Anonymous Function)이다. 이는 전역 스코프에 불필요한 변수를 추가해서 오염시키는 것을 방지할 수 있을 뿐 아니라 IIFE 내부안으로 다른 변수들이 접근하는 것을 막을 수 있는 방법이다.

두 번째 부분은 즉시 실행 함수를 생성하는 괄호()이다. 이를 통해 자바스크립트 엔진은 함수를 즉시 해석해서 실행한다.

 

이것을 활용해 아래와 같은 async 함수를

  useEffect(() => {
    (async () => {
      const response = await fetch(`https://api.themoviedb.org/3/movie/popular?api_key=${API_KEY}`)
      const json = await response.json();
  }, []);

깔끔하게 익명함수로 사용할 수 있다.

(괄호가 많아 지저분해보일지라도)

useEffect(() => {
    (async () => {
      const { results } = await (
        await fetch(
          `https://api.themoviedb.org/3/movie/popular?api_key=${API_KEY}`
        )
      ).json();
    })();
  }, []);

'개발 > 자바스크립트' 카테고리의 다른 글

[NextJS] getSererSideProps  (0) 2022.03.24
자바스크립트 논리연산자 단축평가  (0) 2022.03.23
[NextJS] 넥스트JS 개념  (0) 2022.03.21
[네스트js] 컨트롤러, 프로바이더, 모듈 + validation  (0) 2022.03.17
[리액트]react-beautiful-dnd  (0) 2022.02.14
    '개발/자바스크립트' 카테고리의 다른 글
    • [NextJS] getSererSideProps
    • 자바스크립트 논리연산자 단축평가
    • [NextJS] 넥스트JS 개념
    • [네스트js] 컨트롤러, 프로바이더, 모듈 + validation
    대왕판다
    대왕판다
    let's learn and roll!

    티스토리툴바