
자바스크립트 언어 뿐만 아니라 프로그래밍 언어에서 함수들이 다른 변수처럼 다루어질 때 일급 함수를 가진다고 합니다.
일급 함수의 특징은 다른 함수들(고차함수)에 전달인자 제공되고, 다른 함수에 의해 반환될 수 있으며, 변수에 값으로서 할당될 수 있습니다.
어떻게 함수를 변수에 할당할 수 있을까?
그것은 원시 타입과는 다른 객체 타입의 특징에 있습니다.
객체는 한 덩어리의 오브젝트로 이루어져 메모리 크기가 커서 메모리 구조 Heap영역에 들어가게 됩니다.
결론적으로, 객체를 할당한 변수는 객체가 저장된 메모리 주소를 값으로 가지고 있습니다.
변수에 객체를 할당하면, 변수에는 객체가 저장되어 있는 메모리 주소가 할당됩니다.
// 일반적인 함수
function hello(){
return 'hello';
}
// 함수 표현식(일급 함수)
const hello = () => {
return 'hello';
}
이때 hello에는 'hello'를 리턴하는 함수의 메모리 주소가 할당된다.
변수에 함수를 할당하면, 변수에는 함수가 저장되어 있는 메모리 주소가 할당된다.
const sayHello = (hello, name) => {
console.log(hello() + name);
}
실제로 hello라는 매개변수는 메모리 주소이다.
()을 붙임으로써 함수가 실행하게 되는데, 이는 함수가 저장된 메모리주소를 찾아가 실행시켜준다는 의미이다.
함수를 매개변수로 받는 것도 결국에는 메모리 주소를 받는 것이다.
const num = (number) => {
if(number % 2 === 0){
return () => {
console.log("짝수 입니다.");
}
}
}
함수를 반환하는 것도 결국에는 메모리 주소를 반환하는 것이다.
위의 "함수에 전달인자로 전달" 예시를 보았듯이, 매개변수로 전달할 수 있는 함수를 일급 함수라 부르고, 매개변수로 받을 수 있는 함수를 고차함수라고 부른다.
고차 함수는 다른 함수를 인자로 받거나, 함수를 리턴할 수 있는 함수를 일컫는다.
고차함수는 다른 함수를 인자로 받거나, 함수를 리턴할 수 있는 함수