일급 객체
- 무명의 리터럴로 생성 가능 = 런타임에 생성 가능
- 변수나 자료구조에 저장 가능
- 함수의 매개변수에 전달 가능
- 함수의 반환값으로 사용 가능
자바스크립트의 함수는 위의 조건을 모두 만족하므로 일급 객체다.
즉, 함수를 객체와 동일하게 사용할 수 있다.
- 함수의 매개변수로에 전달 가능, 반환값으로 사용 가능
-> 이 특징은 자바스크립트의 함수형 프로그래밍을 가능케한다.
함수 객체의 프로퍼티
함수도 객체다. 따라서 함수도 프로퍼티를 가질 수 있다.
arguments 프로퍼티
- arguments 객체는 함수 호출 시, 전달된 인수들의 정보를 담고 있는 순회 가능한 유사 배열 객체
- 함수 내부에서 지역 변수처럼 사용된다 -> 함수 외부에선 참조 불가능
- 자바스크립트에서 함수의 매개변수와 인수의 개수가 일치하는지 확인하지 않는다.
- 함수 정의할 때 선언한 매개변수는 함수 내부에서 변수와 동일하게 취급되어 암묵적으로 선언되고, undefined로 초기화된 이후 인수가 할당된다.
length 프로퍼티
- 함수를 정의할 때 선언한 매개변수의 개수
- arguments 객체의 length 프로퍼티 !== 함수 객체의 length 프로퍼티
- arguments 객체의 length 프로퍼티 = 인수의 개수
- 함수 객체의 length 프로퍼티 = 매개변수의 개수
name 프로퍼티
- 함수 이름
- 익명 함수일 때,
- ES5: 빈 문자열
- ES6: 함수 객체를 가리키는 식별자
const namedFunc = function foo() {};
console.log(namedFunc.name);
const anonymousFunc = function () {};
console.log(anonymousFunc.name);
function bar() {}
console.log(bar.name);
proto 접근자 프로퍼티
- 모든 객체는 [[Prototype]] 이라는 내부 슬롯을 가진다.
- [[Prototype]] 내부 슬롯이 가리키는 프로토타입 객체에 접근하기 위해 사용
prototype 접근자 프로퍼티
- 생성자 함수로 호출할 수 있는 함수 객체다.
- constructor에만 존재