1. 함수 정의
1-1. 함수 선언문
- 함수 선언문에서는 함수의 이름을 생략할 수 없다.
- 함수 표현식에서는 함수명을 생략할 수 있다.
1-2. 함수 호이스팅
- 함수 선언문은 런타임 이전 자바스크립트 엔진에 의해 먼저 실행 된다. 따라서 함수 선언문 이전에 함수를 참조할 수 있으며 호출할 수도 있다. 함수 선언문이 코드의 선두로 끌어 올려진 것처럼 동작하는 자바스크립트 고유의 특징을 함수 호이스팅이라고 한다.
- 변수 할당문의 값은 할당문이 실행되는 시점, 런타임에 평가되므로 함수 표현식의 함수 리터럴도 할당문이 실행되는 시점에 평가되어 함수 객체가 된다.
- 함수 표현식으로 정의한 함수는 반드시 함수 표현식 이후에 참조 또는 호출해야 한다.
2. 함수 호출
2-1. 매개변수와 전달인자
- 매개변수는 함수 몸체 내부에서만 참조할 수 있다.
- 함수는 매개변수의 개수와 인수의 개수가 일치하는지 체크하지 않는다.
- 인수가 부족해서 할당되지 않은 매개변수의 값은 undefined이다.
- 매개변수보다 인수가 더 많은 경우 초과된 인수는 무시된다.
- 모든 인수는 암묵적으로 arguments 객체의 프로퍼티로 보관된다.
- 인수를 전달하지 않았을 경우, undefined를 전달하였을 경우 ES6에서 도입된 매개변수 기본값을 사용할 수 있다.
- 매개변수의 최대 개수에 대해 명시적인 제한은 없다.
- 하지만 이상적인 함수는 한 가지 일만 해야 하며 가급적 작게 만들어야 하므로 최대 3개 이상을 넘지 않는 것을 권장한다.
2-2. 반환
- 반환문은 리턴 키워드 뒤에 오는 값을 반환한다.
- 반환 값을 명시적으로 지정하지 않으면 undefined가 반환된다.
- 반환문을 생략할 수도 있다. 이때도 암묵적으로 undefined를 반환한다.
3. 화살표 함수 기본 문법
- ES6에서 도입 된 화살표 함수는 function 키워드 대신 화살표를 사용해 좀 더 간략한 방법으로 함수를 선언할 수 있다.
- 화살표 함수는 항상 익명 함수로 정의한다.
- 본문이 한 줄인 함수를 작성할 때 유용하다.