자바스크립트의 함수는 위의 조건을 모두 만족하므로 일급 객체이다. 함수를 다른 함수의 매개변수나 반환값으로 사용할 수 있다는 점은 함수형 프로그래밍을 가능케 하는 자바스크립트의 장점 중 하나다.
함수는 객체이므로 프로퍼티를 가질 수 있다.
arguments
프로퍼티arguments
프로퍼티 값은 arguments
객체로, 함수 호출 시 전달된 인수들의 정보를 담고 있는 iterable
한 array-like object
이다. 함수 외부에서는 참조할 수 없다.
매개변수의 개수보다 인수를 더 많이 전달한 경우 초과된 인수는 무시되지만, argument
객체의 프로퍼티로 보관된다. 따라서 매개변수 개수를 확정할 수 없는 가변 인자 함수를 구현할 때 유용하다.
caller
프로퍼티함수 자신을 호출한 함수를 가리키는 비표준 프로퍼티이다. 호출한 함수가 없는 경우 프로퍼티는 null
을 가리킨다.
length
프로퍼티함수를 정의할 때 선언한 매개변수의 개수를 가리킨다.
인수의 개수를 나타내는 argument
객체의 length
프로퍼티와 구분할 필요가 있다.
name
프로퍼티함수 이름을 나타내며, ES6에서 정식 표준이 된 프로퍼티이다.
익명 함수 표현식의 경우 ES5에서는 빈 문자열을 값으로 갖지만, ES6부터 함수 객체를 가리키는 식별자를 값으로 갖는다.
__proto__
접근자 프로퍼티함수 객체 고유의 프로퍼티가 아닌 프로토타입 객체인 Object.prototype
객체의 프로퍼티에게 상속받은 접근자 프로퍼티로, [[Prototype]]
내부 슬롯이 가리키는 프로토타입 객체에 간접적으로 접근하기 위해 사용한다.
참고) 객체의 프로토타입을 직접 변경하는 것은 매우 느린 작업(MDN)
prototype
프로퍼티생성자 함수로 호출할 수 있는 함수 객체, 즉 constructor
만이 소유하는 프로퍼티로, 생성자 함수로 호출될 때 생성자 함수가 생성할 인스턴스의 프로토타입 객체를 가리킨다.