학습 공간 개념 · 판단 · 실험

Fanta Lab

질문 13 · 실전 면접 답변

함수 선언과 함수 표현식은 사용 시점이 어떻게 다른가요?

이렇게 답해 보세요 (핵심 답변)

함수 선언문(function fn() {})은 스코프 시작 시점에 함수 객체까지 함께 초기화되므로 선언문보다 앞선 줄에서도 호출할 수 있습니다. 반면 함수 표현식(const fn = function() {} 또는 화살표 함수)은 변수에 함수 값을 할당하는 방식이므로, 해당 변수가 초기화되고 함수가 대입된 이후에만 호출할 수 있습니다. 또한 표현식으로 자주 쓰는 화살표 함수는 일반 함수와 달리 자체적인 this나 arguments, 생성자 기능을 갖지 않는다는 차이도 있습니다.

함께 설명하면 좋은 이유 (꼬리질문 대비)

  1. var 변수에 함수 표현식을 담고 할당 전에 호출하면 변수 값이 undefined이므로 TypeError가 발생합니다.
  2. let이나 const 변수에 함수 표현식을 담고 선언 전에 접근하면 TDZ에 걸려 ReferenceError가 발생합니다.

면접에서 자주 하는 실수

함수 표현식도 변수 선언 자체는 호이스팅되지만 함수 값의 할당까지 미리 끌어올려지는 것은 아닙니다.

원리와 예제까지 읽기

공식 참고 자료

질문 목록 출처 ↗ · 원본 13번을 바탕으로 질문과 답변을 새로 정리했습니다.

← JavaScript