'일급' 이란 뜻은 일급 시민 처럼 무슨 혜택을 받는 다는 뜻이 아니라, 사용할 때 다른 요소들과 아무런 차별이 없다는 것을 뜻한다.
그리고 보통 일급 객체를 아래 3가지 조건을 충족한 객체를 일컫는다.
자바스크립트의 함수는 위의 조건을 만족하기에 일급 객체가 되고 '일급 함수' 란 함수를 일급 객체로 취급하는 것을 일컫는다.
함수가 일급 객체라는 것은 함수를 객체와 동일하게 사용할 수 있다는 의미이고 객체는 값이므로 이는 결국 함수를 값과 동일하게 취급할 수 있다는 말이 된다.
간단히 말해, "함수"라는 대상이 "값"으로서 사용될 수 있다고 생각하면 된다.
// 1. 함수는 무명의 리터럴로 생성할 수 있다.
// 2. 함수는 변수에 저장할 수 있다.
const add = function (num1, num2) {
return num1 + num2;
}
// 2. 함수는 객체에 저장할 수 있다.
const calculator = { add }
// 3. 함수의 매개변수에 전달할 수 있다.
function sayHello() {
return "Hello, ";
}
function greeting(message, name) {
console.log(message() + name);
}
// `sayHello`를 전달인자로 `greeting` 함수에 전달
greeting(sayHello, "JavaScript!"); // Hello, JavaScript!
// 4. 함수 반환
function helloWorld() {
return () => {
console.log("Hello, world!");
}
}