함수는 완전히 객체처럼 동작할 수 있는데, 그 이는 객체가 가지고 있는 내부슬롯, 내부 매서드를 가지고 있기 때문입니다.
그런데 객체는 함수가 아닙니다. 왜냐하면 함수만이 가지고 있는 내부슬롯과 내부 매서드가 존재하기 때문입니다.
내부매서드 [[Call]]을 가지는 객체를 callable 객체 (=callable 함수 객체)라고 합니다.
callable 함수 객체 중에서 [[contructor]]을 가지는 객체를 contructor 함수 객체라고 하며, 가지지 않는 객체를 non-contructor 함수 객체라고 합니다. 자바스크립트 객체는 함수 정의 방식에 따라서 이 둘을 구별합니다.
- contructor: 함수 선언문, 함수 표현식, 클래스
- non-contructor: 화살표 함수