자바스크립트 함수 선언문과 함수 표현식
자바스크립트 핵심 개념· 4 / 9
함수 정의 방식
자바스크립트에서 함수를 정의하는 방식은 크게 함수 선언문과 함수 표현식 두 가지로 나뉜다.
함수 선언문
function 정의부만 존재하고 별도의 할당 명령이 없는 정의 방식으로 식별자를 필수로 지정해주어야 한다.
function a () { }
a();호이스팅 시, 함수 전체가 수집된다.
함수 표현식
function 정의한 function을 별도의 변수에 할당하는 방식으로 엄밀히 말하면 함수가 아닌 변수이다. 식별자를 선언하는가에 따라 익명 함수와 기명 함수로 나뉜다.
// 익명 함수 표현식
let b = function () { }
b();
// 기명 함수 표현식
let c = function d () { }
c();
// 기명 함수 표현식은 외부에서 호출할 경우 변수명을, 내부(재귀)에서 호출할 경우 함수명으로 접근해야한다.
// 디버깅 시 어떤 함수인지 추적하기에 유리했지만, 현재는 브라우저들이 익명 함수 표현식의 변수명을 함수의 name 프로퍼티에 할당하게 함으로써 그 효과가 줄어들었다.호이스팅 시, 변수 선언부만 수집된다.
비교
함수선언문은 함수의 내용까지 할당하기에 후반에 동명의 함수를 선언하면 호이스팅 단계에서 오버라이드될 위험의 여지가 있는 반면, 함수표현식은 함수의 식별자만 선언한 후 코드 실행 단계에서 변수를 할당하므로 오버라이드의 위험을 줄일 수 있다.