1. 일급 객체 -> 함수
- 변수에 할당할 수 있다.
- 다른 함수의 인자로 전달될 수 있다.
- 다른 함수의 결과로서 리턴될 수 있다.
2. 고차 함수 : 함수를 인자로 받거나 함수를 리턴하는 함수
다른 함수의 인자로 전달되는 함수 = 콜백 함수
함수를 리턴하는 함수만을 일컫는 용어 = 커리 함수
엄밀한 의미에서 고차 함수는 커리 함수를 포함한다.
1. 다른 함수를 인자로 받는 경우
function double(num) {
return num * 2;
}
function doubleNum(func, num) {
return func(num);
}
// 함수 doubleNum은 다른 함수를 인자로 받는 고차 함수다.
// 함수 func는 함수 doubleNum의 콜백 함수다.
// 아래와 같은 경우, 함수 double은 함수 doubleNum의 콜백 함수다.
let output = doubleNum(double, 4);
console.log(output); // -> 8
2. 함수를 리턴하는 경우
function adder(added) {
return function (num) {
return num + added;
};
}
// 함수 adder는 다른 함수를 리턴하는 고차 함수다.
// adder는 인자 한 개를 입력받아서 함수(익명 함수)를 리턴한다.
// 리턴되는 익명 함수는 인자 한 개를 받아서 added와 더한 값을 리턴한다.
// adder(5)는 함수이므로 함수 호출 연산자 '()'를 사용할 수 있다.
let output = adder(5)(3); // -> 8
console.log(output); // -> 8
// adder가 리턴하는 함수를 변수에 저장할 수 있다.
// javascript에서 함수는 일급 객체이기 때문이다.
const add3 = adder(3);
output = add3(2);
console.log(output); // -> 5
3. 내장 고차 함수
1. filter 메서드 : 배열의 요소 중 특정 조건을 만족하는 요소들만을 걸러낸다.
2. map 메서드 : 배열의 요소들을 특정 함수를 통해 새로운 배열로 반환한다.
3. reduce 메서드 : 배열의 요소들을 특정 함수를 통해 하나의 형태로 응축한다.
4. 고차함수 예제
1. 배열과 임의의 값(discarder)을 입력받아 discarder와 일치하는 요소가 제거된 새로운 배열을 리턴
function removeElement(arr, discarder) {
return arr.filter(function (el) {
if (el !== discarder) {
return true;
}
return false;
});
}
2. 개인 정보를 담고 있는 객체를 요소로 갖는 배열을 입력받아 이름 전체를 요소로 갖는 배열 리턴
function getFullNames(arr) {
return arr.map(function (person) {
return `${person.firstName} ${person.lastName}`;
});
}
3. 2차원 배열을 입력받아 배열들의 요소를 모두 담고 있는 단일 배열을 리턴
function joinArrayOfArrays(arr) {
let result = arr.reduce(function(pre, cur) {
return pre.concat(cur);
})
return result;
}
4. 2차원 배열을 입력받아 모든 수(number)의 합을 리턴
function sumOfArraysInArray(arr) {
let result = 0;
arr.map(function(el) {
el.map(function(pr) {
if (typeof pr === 'number') {
result += pr;
}
})
})
return result;
}
// solution 2
// function sumOfArraysInArray(arr) {
// const joinedArr = arr.reduce(function (acc, cur) {
// return acc.concat(cur);
// });
// const onlyNumbers = joinedArr.filter(function (el) {
// return typeof el === 'number';
// });
// return onlyNumbers.reduce(function (acc, cur) {
// return acc + cur;
// }, 0);
// }
'TIL 👩🏻💻' 카테고리의 다른 글
TIL : DOM (0) | 2021.03.18 |
---|---|
TIL : Algorithm Basic (0) | 2021.03.18 |
TIL : Twittler 목업 구현하기 (0) | 2021.03.15 |
TIL : Javascript Koans (0) | 2021.03.12 |
TIL : Command Line, Git (0) | 2021.03.11 |