함수가 일급 객체라는 것은 함수를 객체와 동일하게 사용
=> 객체는 값이므로, 함수는 값과 동일하게 취급.
=> 함수는 값을 사용할 수 있는 곳 어디든 리터럴로 정의 가능, 런타임에 함수 객체로 평가.
호출 | 함수 고유의 프로퍼티 | |
---|---|---|
일반 객체 | x | |
함수 객체 | o | 소유 |
함수는 프로퍼티를 가질 수 있다.
모든 프로퍼티의 프로퍼티 어트리뷰트 확인
위 프로퍼티는 모두 함수 객체의 데이터 프로퍼티
arguments 객체
: 함수 호출 시 전달된 인수들의 정보를 담고 있는 순회 가능한 유사 배열 객체
가변 인자 함수
: 매개변수 개수를 확정할 수 없는 함수
특징
function sum(...args){
return args.reduce((pre,cur) => pre + cur, 0)
}
console.log(sum(1,2,3,4,5)) // 15
선언한 매개변수의 개수를 가리킨다.
특징
var func1 = function test1(){};
console.log(func1.name) // test1
var func2 = function(){};
console.log(func2.name) // func2
function func3() {}
console.log(func2.name) // func3
[[Prototype]] 내부 슬롯은 객체지향 프로그래밍의 상속을 구현하는 프로토 타입 객체를 가리킨다.
hasOwnPropery
생성자 함수로 호출할 수 있는 함수 객체, 즉 constructor만이 소유하는 프로퍼티다.
// 함수 객체는 소유한다.
(function () {}).hasOwnProperty('prototype') // true
// 일반 객체는 소유하지 않는다.
({}).hasOwnProperty('prototype') // false