Achievement Goals
- 일급 객체(first-class citizen)의 세 가지 특징을 설명할 수 있다.
다음과 같은 조건을 만족하는 객체를 일급 객체라고 한다.
- 무명의 리터럴로 생성할 수 있다. 즉, 런타임에 생성이 가능하다.
- 변수나 자료구조(객체, 배열 등)에 저장할 수 있다.
- 함수의 매개변수에 전달할 수 있다.
- 함수의 반환값으로 사용할 수 있다.
함수는 자바스크립트에서 대표적인 일급 객체 중 하나이다.
// 1. 함수는 무명의 리터럴로 생성할 수 있다.
// 2. 함수는 변수에 저장할 수 있다.
// 런타임(할당 단계)에 함수 리터럴이 평가되어 함수 객체가 생성되고 변수에 할당된다.
const increase = function (num) {
return ++num;
};
const decrease = function (num) {
return --num;
};
// 2. 함수는 객체에 저장할 수 있다.
const predicates = { increase, decrease };
// 3. 함수의 매개변수에 전달할 수 있다.
// 4. 함수의 반환값으로 사용할 수 있다.
function makeCounter(predicate) {
let num = 0;
return function () {
num = predicate(num);
return num;
};
}
// 3. 함수는 매개변수에게 함수를 전달할 수 있다.
const increaser = makeCounter(predicates.increase);
console.log(increaser()); // 1
console.log(increaser()); // 2
// 3. 함수는 매개변수에게 함수를 전달할 수 있다.
const decreaser = makeCounter(predicates.decrease);
console.log(decreaser()); // -1
console.log(decreaser()); // -2
// 참고자료 모던 자바스크립트 Deep Dive
- 고차 함수(higher-order function)에 대해 설명할 수 있다.
고차 함수는 함수를 인자로 받을 수 있고 함수의 형태로 리턴할 수 있는 함수이다. 일상생활에서 얘기하는 1,2,3,4차원처럼 고차 함수는 함수 안에 함수... 함수 안에 함수... 같은 식으로 이해할 수 있다.
다른 함수의 인자로 전달되는 함수를 콜백 함수라고 부르며 콜백 함수를 전달받은 고차 함수는 함수 내부에서 이 콜백 함수를 호출할 수 있다.
함수를 리턴하는 함수는 처음으로 고안해 낸 논리학자 하스켈 커리(Haskell Curry)의 이름을 따서 커리 함수라고 부르기도 한다.
function double(num) {
return num * 2;
};
function doubleAdder(added, func) {
const doubled = func(added);
return function (num) {
return num + doubled;
};
};
// 함수 doubleAdder는 고차 함수이다.
// 함수 doubleAdder의 인자 func는 함수 doubleAdder의 콜백 함수이다.
// 함수 double은 함수 doubleAdder의 콜백으로 전달되었다.
// doubleAdder(5, double)은 함수이므로 함수 호출 기호 '()'를 사용할 수 있다.
doubleAdder(5, double)(3); // 13
// doubleAdder가 리턴하는 함수를 변수에 저장할 수 있다. (일급 객체)
const addTwice3 = doubleAdder(3, double);
addTwice3(2); // 8
'학습목표 정리' 카테고리의 다른 글
[React] 기초 Chapter - React Intro (0) | 2021.10.05 |
---|---|
[JS/Node] 고차함수 Chapter - 내장 고차함수 이해하기 (0) | 2021.09.16 |
[JS/브라우저] DOM Chapter - 이벤트 객체 (0) | 2021.09.13 |
[JS/브라우저] DOM Chapter - DOM으로 HTML 조작하기 (0) | 2021.09.03 |
[JS/브라우저] DOM Chapter - DOM 이해하기 (0) | 2021.09.03 |