[JS] 고차함수(higher order function)
8254 단어 JavaScriptCODESTATESCODESTATES
특별한 대우를 받는 함수
- 자바스크립트에서 특별한 대우를 받는 것 → 일급 객체(first-class citizen)
- 그 중 하나가 함수!
- 변수에 할당(assignment)할 수 있다.
- 다른 함수의 인자(argument)로 전달될 수 있다.
- 다른 함수의 결과로서 리턴될 수 있다.
고차 함수란(higher order function)
- 함수를 인자(argument)로 받거나 함수를 리턴하는 함수
- 다른 함수(caller)의 인자(argument)로 전달되는 함수를 콜백 함수(callback function)
caller
- 조건에 따라 콜백 함수의 실행 여부를 결정할 수도 있고, 여러 번 실행도 가능invoke
- 콜백 함수를 전달받은 함수가 콜백 함수를 호출 하는 것커리 함수
- 함수를 리턴하는 함수 *논리학자 하스켈 커리의 이름을 따라 만든 이름
다른 함수를 인자로 받는 경우
function double(num) {
return num * 2;
}
function doubleNum(func, num) {
return func(num);
}
let output = doubleNum(double, 4);
console.log(output); // -> 8
- 함수 doubleNum → 고차 함수
- 함수 func → 함수 doubleNum의 콜백 함수
- 함수 double → 함수 doubleNum의 콜백 함수
함수를 리턴하는 경우
function adder(added) {
return function (num) {
return num + added;
};
}
let output = adder(5)(3); // -> 8
console.log(output); // -> 8
const add3 = adder(3);
output = add3(2);
console.log(output); // -> 5
- 함수 adder → 고차함수
- adder → 인자 한개를 입력받아서 익명 함수를 리턴
- 리턴되는 익명 함수 → 인자를 받아서 added와 더한 값을 리턴
- adder(added)는 함수이므로 함수 호출 연산자 '()'를 사용 가능
- *adder가 리턴하는 함수를 변수에 저장할 수 있다. ← 함수는 일급 객체이기 때문
함수를 인자로 받고, 함수를 리턴하는 경우
function double(num) {
return num * 2;
}
function doubleAdder(added, func) {
const doubled = func(added);
return function (num) {
return num + doubled;
};
}
doubleAdder(5, double)(3); // -> 13
const addTwice3 = doubleAdder(3, double);
addTwice3(2); // --> 8
- 함수 doubleAdder → 고차함수
- 함수 func → 함수 doubleAdder의 콜백 함수
- 함수 double → 함수 doubleAdder의 콜백 함수
내장 고차함수
filter 메소드
- 배열의 filter 메소드는 배열의 요소 중 특정 조건을 만족하는 요소들만을 걸러내는 메소드.
- 걸러내는 기준이 되는 특정 조건은 함수 형태로 filter 메소드의 인자로 전달되어야 함
- filter 메소드는 인자로 전달되는 콜백 함수에 배열의 요소를 다시 전달
- 콜백 함수는 전달받은 배열의 요소를 받아 (조건에 따라) 참(true) 또는 거짓(false)을 리턴해야 함
- 배열의 각 요소가
- 특정 논리(함수)에 따르면, 사실(boolean)일 때
- 따로 분류한다(filter).
map 메소드
- 배열의 각 요소가
- 특정 논리(함수)에 의해
- 다른 요소로 지정(map) 된다.
reduce 메소드
- 배열의 각 요소를
- 특정 응축 방법(함수)에 따라
- 원하는 하나의 형태로
- 응축한다(reduction).
Author And Source
이 문제에 관하여([JS] 고차함수(higher order function)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@daeseongkim/20200201TIL고차함수저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)