함수 선언문과 함수 표현식 (with 호이스팅)

17__COLIN·2024년 2월 14일
0

BOOK-STUDY

목록 보기
3/9
post-thumbnail

공부를 하면서 개인적으로 궁금했던 부분을 해결하거나, 스터디를 통해 배운 내용을 정리합니다.

💥 함수 호이스팅이란?

함수에 대한 선언을 실행 전에 미리 메모리에 등록하는 작업이다.

💥 함수 호이스팅과 변수 호이스팅의 차이?

  • 유사점 : var 키워드를 사용한 변수 선언문과 함수 선언문은 런타임 이전에 먼저 실행되어 식별자를 생성한다
  • 차이점 :
    • 변수와 함수 선언문 : 변수의 경우 undefined로 초기화되고, 함수 선언문을 통해 생성된 식별자는 함수 객체로 초기화된다.
    • 변수와 함수 표현식 : 변수 선언은 런타임 이전에 실행되어 undefined로 초기화되지만, 변수 할당문의 값은 런타임에 평가되므로 할당문이 실행되는 시점에 평가되어 함수 객체가 된다. ← 함수 표현식은 변수 선언문과 변수 할당문을 한 번에 기술한 표현과 동일하게 동작하기 때문 ⇒ 함수 표현식으로 함수를 정의할 경우 변수 호이스팅이 발생한다.

즉, 해당 개념을 토대로 함수 선언문과 함수 표현식을 정리한다면

함수 선언문으로 정의한 함수는 함수 선언문 이전에 호출할 수 있다.

그러나 함수 표현식으로 정의한 함수는 함수 표현식 이전에 호출할 수 없다.

이는 함수 선언문으로 정의한 함수와 함수 표현식으로 정의한 함수의 생성 시점이 다르기 때문이다.

함수 선언문의 경우 미리 메모리에 등록되기 때문에, 코드의 순서에 상관없이 정상적으로 함수를 호출할 수 있게 되는 것이다.

함수 표현식은 함수를 변수에 할당하기 때문에, 런타임 이전에 undefined로 초기화되고, 런타임 시점에 함수가 할당되어 작동된다.

profile
조금씩 꾸준히

0개의 댓글