← Notes

자바스크립트 함수 선언문과 함수 표현식

자바스크립트 핵심 개념· 4 / 9
  1. 1 — 자바스크립트 undefined와 null
  2. 2 — 자바스크립트 실행 컨텍스트
  3. 3 — 자바스크립트 호이스팅
  4. 4 — 자바스크립트 함수 선언문과 함수 표현식
  5. 5 — 자바스크립트 스코프 체인
  6. 6 — 자바스크립트 this
  7. 7 — 자바스크립트 콜백 함수
  8. 8 — 자바스크립트 클로저와 가비지 컬렉션
  9. 9 — 자바스크립트 프로토타입

함수 정의 방식

자바스크립트에서 함수를 정의하는 방식은 크게 함수 선언문과 함수 표현식 두 가지로 나뉜다.

함수 선언문

function 정의부만 존재하고 별도의 할당 명령이 없는 정의 방식으로 식별자를 필수로 지정해주어야 한다.

function a () {  }
a();

호이스팅 시, 함수 전체가 수집된다.

함수 표현식

function 정의한 function을 별도의 변수에 할당하는 방식으로 엄밀히 말하면 함수가 아닌 변수이다. 식별자를 선언하는가에 따라 익명 함수와 기명 함수로 나뉜다.

// 익명 함수 표현식
let b = function () { }
b();

// 기명 함수 표현식
let c = function d () { }
c();

// 기명 함수 표현식은 외부에서 호출할 경우 변수명을, 내부(재귀)에서 호출할 경우 함수명으로 접근해야한다. 
// 디버깅 시 어떤 함수인지 추적하기에 유리했지만, 현재는 브라우저들이 익명 함수 표현식의 변수명을 함수의 name 프로퍼티에 할당하게 함으로써 그 효과가 줄어들었다.

호이스팅 시, 변수 선언부만 수집된다.

비교

함수선언문은 함수의 내용까지 할당하기에 후반에 동명의 함수를 선언하면 호이스팅 단계에서 오버라이드될 위험의 여지가 있는 반면, 함수표현식은 함수의 식별자만 선언한 후 코드 실행 단계에서 변수를 할당하므로 오버라이드의 위험을 줄일 수 있다.

목차