다음 조건을 만족하는 객체를 일급 객체
라 한다.
자바스크립트의 함수
는 객체이며, 위 조건을 모두 만족하기 때문에 일급 객체
다.
함수 표현식으로 함수를 정의하는 경우 이름을 작성하지 않아도 되며, (함수 선언문으로 정의한 함수와는 다르게) 런타임에 생성된다.
const functionLiteral = function () {
console.log('이 함수는 함수 리터럴로 정의되었습니다.');
};
function canSave() {
console.log('이 함수는 변수나 자료구조에 저장할 수 있습니다.');
}
const variable = canSave;
const array = [canSave];
const object = {
func: canSave,
};
function canBeArgument() {
console.log('이 함수는 인수가 될 수 있습니다.');
}
function foo(func) {
func();
}
foo(canBeArgument);
function outerFunc() {
function innerFunc() {
console.log('이 함수는 중첩 함수입니다.');
}
return innerFunc;
}
const inner = outerFunc();
inner();
따라서 함수를 객체와 동일하게 사용할 수 있다. 즉, 함수를 값처럼 사용할 수 있다. 이는 함수형 프로그래밍이 가능한 이유다.
단, 함수와 객체는 차이가 존재한다.
함수와 객체의 차이
함수
: 호출할 수 있다. 함수만 갖는 고유 프로퍼티가 있다.
객체
: 호출할 수 없다.