JavaScript에는 특별한 대우를 받는 일급 객체(first-class citizen)가 있다.
대표적인 것이 바로 함수이다. 아래는 이러한 함수의 3가지 특징이다
const func = function () {
console.log('hi');
}
이러한 특징으로 함수를 배열의 요소나 객체의 속성값으로 저장할 수 있으며, 함수를 데이터(string
, number
, boolean
, array
, object
) 처럼 다룰 수 있다.
변수에 할당 했을 때의 또다른 예제
/*
* 아래는 변수 square에 함수를 할당하는 함수 표현식입니다.
* JavaScript에서 함수는 일급 객체이기 때문에 변수에 할당할 수 있습니다.
*
* 함수 표현식은 할당 전에 사용할 수 없습니다.
* square(7); // --> ReferenceError: Can't find variable: square
*/
const square = function (num) {
return num * num;
};
// 변수 square에는 함수가 할당되어 있으므로 (일급 객체), 함수 호출 연산자 '()'를 사용할 수 있습니다.
output = square(7);
console.log(output); // --> 49
콜백함수
라고 하며, 아래의 예시에서 콜백함수는 sayHello
이다.function sayHello() {
return "Hello, ";
}
function greeting(helloMessage, name) {
console.log(helloMessage() + name);
}
// greeting() 함수의 인자로 sayHello() 함수 전달
greeting(sayHello, "JavaScript!"); // Hello, JavaScript!
고차함수
라고 한다.function sayHello() {
return function() { // 함수를 변수처럼 취급하는 첫번째 특징으로인해 반환도 가능하다.
console.log("Hello!");
}
}
// 변수를 사용했을 때
const sayHello = function() {
return function() {
console.log("Hello!");
}
}
const myFunc = sayHello(); // 만약 sayHello()를 직접 호출하면 반환된 함수를 호출하지 않고, 함수 자체를 반환하기 때문에 반환된 함수를 다른 변수에 저장하여 사용해야 한다.
myFunc(); // Hello!
반환된 함수를 그대로 호출했을 때