18장 함수와 일급 객체
18.1 일급 객체
아래의 조건을 만족하는 객체를 일급 객체라고 함
자바스크립트의 함수 == 일급 객체
- 무명의 리터럴로 생성할 수 있음 (런타임에 생성 가능)
- 변수나 자료구조(객체, 배열 등)에 저장할 수 있음
- 함수의 매개변수에 전달할 수 있음
- 함수의 반환값으로 사용할 수 있음
18.2 함수 객체의 프로퍼티
함수는 객체이고 프로퍼티를 가질 수 있다.
- 객체 내부 프로퍼티 확인 : console.dir
- 내부 프로퍼티의 프로퍼티 어트리뷰터 확인 : Object.getOwnPropertyDescriptors메서드 사용
- 함수 객체 데이터 프로퍼티 : arguments, caller, length, name, prototype
18.2.1 arguments프로퍼티 (ES3부터 폐지됨)
- 함수 호출 시 전달된 인수들의 정보를 담고 있는 유사배열객체임
- 초과된 인수가 암묵적으로 보관되므로 가변인자함수를 구현할 때 유용함
- ES6이후 Rest파라미터로 대체됨
18.2.2 caller프로퍼티
- ECMAScript사양에 포함되지 않은 비표준 프로퍼티로 함수 자신을 호출한 함수를 가리킴
18.2.3 length프로퍼티
- 함수를 정의할 때 선언한 매개변수의 개수를 가리킴
18.2.4 name프로퍼티
- 함수 이름을 나타냄 (ES6에서 정식 표준이 됨)
익명함수 표현식일 경우 버전에 따른 name값
- ES5 : 빈 문자열
- ES6 : 함수 객체를 가리키는 식별자
18.2.5 proto접근자 프로퍼티
- [[Prototype]]내부 슬롯이 가리키는 프로토타입 객체에 접근하기 위해 사용하는 접근자 프로퍼티
18.2.6 prototype프로퍼티
- 생성자 함수로 호출할 수 있는 함수객체만 소유하는 프로퍼티