<aside> 💡 자바스크립트 함수는 위의 조건을 모두 만족하므로 ‘일급객체'이다.
</aside>
//1. 함수는 무명의 리터럴로 생성 할 수 있다.
//2. 함수는 변수에 저장 할 수 있다.
const increase = function (num) {
return ++num
}
const decrease = function (num) {
return --num
}
// 2. 함수는 객체에 저장 할 수 있다.
const predicates = { increase, decrease }
// 3. 함수의 매개변수에 전달 할 수 있다.
function makeCounter(predicate) {
let num = 0
// 4. 함수의 반환값으로 사용 할 수 있다.
return function () {
num = predicate(num)
return num
}
}
const increaser = makeCounter(predicates.increase);
console.log(increaser()) // 1
console.log(increaser()) // 2
일급 객체로서 함수가 가지는 가장 큰 특징은 일반 객체와 같이 함수의 매개변수에 전달 할 수 있고, 함수의 반환값으로 사용할 수도 있다.
<aside> 💡 함수형 프로그래밍을 가능하게 하는 자바스크립트의 장점 중 하나이다.
</aside>
함수는 객체이지만, 일반 객체와는 차이가 있다. 일반 객체는 호출 할 수 없지만, 함수 객체는 호출할 수 있다. 그리고 함수 객체는 일반 객체에는 없는 함수 고유의 프로퍼티를 소유한다.
함수는 객체다. 따라서 함수도 프로퍼티를 가질 수 있다.
<aside> 💡 arguments, caller, length, name, prototype 프로퍼티는 모두 함수 객체의 데이터 프로퍼티다. 이 프로퍼티들은 일반 객체에는 없는 함수 객체의 고유 프로퍼티이다.
</aside>