자바스크립트를 제대로 이해하기 위해서는 '1급 객체(First-Class Object)'라는 개념을 알아야 한다.
프로그래밍 언어에서 어떤 요소가 다음 세 가지 조건을 만족할 때, 이를 '1급 객체'라고 한다.
자바스크립트에서 함수는 이 모든 조건을 충족하므로 1급 객체로 간주된다.
자바스크립트에서는 함수를 변수에 할당할 수 있다.
const greet = function(name) {
return `Hello, ${name}`;
};
console.log(greet("Alice")); // Hello, Alice
또한 배열이나 객체에도 함수를 저장할 수 있다.
const arr = [
function(a, b) { return a + b; },
function(a, b) { return a - b; }
];
console.log(arr[0](5, 3)); // 8
console.log(arr[1](5, 3)); // 2
자바스크립트 함수는 다른 함수에 인자로 전달될 수 있다.
function greet(name, formatter) {
return formatter(name);
}
function formalGreeting(name) {
return `안녕하세요, ${name} 님`;
}
function casualGreeting(name) {
return `안녕, ${name}!`;
}
console.log(greet("Alice", formalGreeting)); // 안녕하세요, Alice 님
console.log(greet("Bob", casualGreeting)); // 안녕, Bob!
자바스크립트에서는 함수가 다른 함수를 반환하는 형태로도 사용할 수 있다.
function createMultiplier(x) {
return function(y) {
return x * y;
};
}
const multiplyByTwo = createMultiplier(2);
console.log(multiplyByTwo(5)); // 10
자바스크립트가 함수를 1급 객체로 취급하기 때문에 얻는 주요 이점은 다음과 같다.
etc)
고차 함수(Higher-Order Function)
고차 함수란 다음 중 하나 이상을 만족하는 함수:
콜백 함수(Callback Function)
콜백 함수는 다른 함수에 인자로 전달되어 나중에 호출되는 함수
자바스크립트에서 함수가 1급 객체라는 건 무슨 의미인가요?
변수에 할당, 인자로 전달, 리턴값으로 사용이 가능하다는 의미입니다.
고차 함수와 콜백 함수의 차이는 무엇인가요?
고차 함수는 함수를 인자로 받거나 반환하는 함수이고, 콜백 함수는 고차 함수에 인자로 전달되어 나중에 호출되는 함수입니다.
실제 사용 예시는 어떤 게 있나요?
Array.prototype.map, filter, reduce, setTimeout, addEventListener 등은 모두 고차 함수이며, 이들에 전달되는 함수는 콜백 함수입니다.
출처
https://velog.io/@reveloper-1311/일급-객체First-Class-Object란
https://inpa.tistory.com/entry/CS-👨💻-일급-객체first-class-object#1.변수나데이터에담을수있어야한다.-1
https://developer.mozilla.org/ko/docs/Glossary/First-class_Function