: 일급 객체의 조건을 충족하는 객체.
무명의 리터럴로 생성할 수 있다. ( = 런타임(할당단계)에 생성이 가능하다. )
변수나 자료구조( 객체, 배열 등 )에 저장할 수 있다.
함수의 매개변수에 전달할 수 있다.
함수의 반환 값으로 사용할 수 있다.
⭐ 자바스크립트의 함수는 위의 조건을 만족하므로 일급객체이다. ⭐
함수는 일급객체이다 = 함수를 객체와 동일하게 사용할 수 있다.
⇒ 객체 = 값
이므로, 함수 = 값
으로 취급할 수 있다.
함수의 매개변수에 저장되고, 함수의 반환값으로 사용할 수 있다는 특징이 함수형 프로그래밍을 가능하게 하는 자바스크립트의 장점이다.
함수객체와 일반객체의 차이점
Function.prototype.call
,Function.prototype.apply
를 사용해 간접호출 ⇒ Rest 파라미터 도입 ( ES6 )arguments 객체는 매개변수 개수를 확정할 수 없는 가변 인자 함수를 구현할 때 유용하다.
function foo(func){
return func();
}
function bar(){
return 'caller: ' + bar.caller;
}
console.log(foo(bar); // caller : function foo(func){...}
console.log(bar()); // caller : null
[[Prototype]]
이라는 내부슬롯을 가지며, 이 내부 슬롯은 객체지향 프로그래밍의 상속을 구현하는 프로토타입 객체를 가리킨다.[[Prototype]]
내부슬롯에는 직접 접근할 수 없기 때문에 간접적인 접근 방법으로 접근해야하는데, 이 때 사용하는 것이 proto 접근자 프로퍼티이다.