2. 함수 표현식
- 자바스크립트의 함수는 일급 객체 -> 값처럼 변수 할당, 프로퍼티나 배열에 사용 가능
- 함수 표현식: 함수 리터럴로 생성한 함수 객체를 변수에 할당하는 함수 생성 방식
- 함수 표현식의 함수 리터럴은 함수 이름을 생략하는 것이 일반적
var add = function (x, y) {
return x + y;
};
3. 함수 생성 시점과 함수 호이스팅
- 함수 선언문 vs. 함수 표현식
- 함수 선언문은 표현식이 아닌 문, 함수 표현식은 표현식인 문
- 함수 생성 시점이 다름. 함수 표현식은 함수 표현식 이전에 호출이 불가능함
- 호이스팅: 함수 선언문이 코드의 선두로 끌어올려진 것처럼 동작하는 자바스크립트의 특징. 함수 선언문보다 위의 코드에서 해당 함수를 호출 가능함
- 함수 호이스팅 vs. 변수 호이스팅: 함수 객체로 초기화 / undefined로 초기화
- 함수 표현식은 변수에 할당되는 값이 함수 리터럴인 문 -> 변수 선언문과 변수 할당문을 한 번에 기술한 축약 표현과 동일하게 동작함
- 변수 할당문의 값은 할당문이 실행되는 시점, 즉 런타임에 평가됨. 함수 표현식도 마찬가지 -> 함수 표현식은 변수 호이스팅이 발생(함수 호이스팅 X)
- 함수 표현식 이전에 함수를 참조하면 변수 선언문처럼 undefined로 평가되므로 이때의 함수 호출은 undefined 호출 -> 에러 발생
5. Function 생성자 함수
- Function 생성자 함수: 빌트인 함수인 Function 생성자 함수를 사용해 new 연산자와 함께 호출하면 함수 객체를 생성해서 반환. new 연산자는 생략 가능함
- Function 생성자 함수로 생성된 함수는 다른 생성 방식의 함수와 다르게 동작하므로 사용하지 않는 것이 바람직함
화살표 함수
- function 키워드 대신 화살표를 사용한 함수 선언 방식. 항상 익명 함수로 함수를 정의함
- 생성자 함수로의 사용 불가능, this 바인딩 방식의 차이, prototype 프로퍼티 없음, arguments 객체를 생성하지 않는 등의 차이가 있음