티스토리 뷰

함수는 객체이므로 일반 객체와 동일하게 동작한다.

즉, 함수 객체는 내부 슬롯과 내부 메서드를 모두 가지고 있다.

 

일반 객체와 다른 점은 함수는 호출할 수 있다는 부분이다.

function test() {}

test(); // [[Call]] 호출

new test(); // [[Construct]] 호출

함수가 일반 함수로 호출되면 내부 메서드 [[Call]]이 호출되며

new 연산자와 함께 호출되면 내부 메서드 [[Construct]]가 호출된다.

 

1. Call

[[Call]]을 갖는 함수 객체를 callable이라 한다.

callable은 호출할 수 있는 객체인 함수를 말한다.

 

호출할 수 없는 객체는 함수 객체가 아니기 때문에 함수 객체는 반드시 callable이어야한다.

모든 함수 객체는 내부 메서드 [[Call]]을 갖고 있기 때문에 호출 가능한 것이다.

 

2. Construct

내부 메서드 [[Construct]]를 갖는 객체를 constructor,

[[Construct]]를 갖지 않는 함수 객체를 non-constructor라고 부른다.

 

constructor는 생성자 함수로서 호출할 수 있는 함수이며,

non-constructor는 객체를 생성자 함수로서 호출할 수 없는 함수를 의미한다.

 

모든 함수 객체가 [[Construct]]이진 않다.

 

3. 결론

모든 함수 객체는 호출 가능하나 모든 함수 객체를 생성자 함수로서 호출할 수 있는 것은 아니다.

댓글