고차함수

김나율·2022년 9월 20일
0

section2

목록 보기
1/15
post-thumbnail

◎고차함수

: 함수를 전달인자로 받을 수 있고, 함수를 리턴할 수 있는 함수

일급객체

: 특별하게 취급
1. 변수에 할당가능
2. 다른 함수의 전달인자로 전달될 수 있다.
3. 다른 함수의 결과로서 리턴될 수 있다.
=>javascript에서 함수는 일급객체

‣고차함수의 종류

  • '다른 함수를 인자로 받는 경우'
    -콜백함수
    : 고차 함수의 전달인자로 전달되는 함수
function double(num) {
  return num * 2;
}
//doubleNum은 다른 함수를 인자로 받는 고차함수
function doubleNum(func, num) {
  return func(num);
}
//func(=>double)는 함수 doubleNum의 콜백함수
let output = doubleNum(double, 4);
console.log(output); // -> 8
  • '함수를 리턴하는 경우'( = 커링함수 )
//함수 adder는 다른 함수를 리턴하는 고차함수
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
  • '함수를 인자로 받고, 함수를 리턴하는 경우'
function double(num) {
  return num * 2;
}
//함수 douvleAdder는 고차함수
//func는 doubleAdder의 콜백함수
function doubleAdder(added, func) {
  const doubled = func(added);
  return function (num) {
    return num + doubled;
  };
}
//double은 doubleAdder의 콜백함수
doubleAdder(5, double)(3); // -> 13
const addTwice3 = doubleAdder(3, double);
addTwice3(2); // --> 8

*함수를 리턴하는 함수, 함수를 전달인자로 받는 함수 모두 고차함수!!(고차함수가 콜백함수, 커링함수 포함)


◎내장 고차함수

filter : 모든 배열의 요소 중에서 특정 조건을 만족하는 요소를 걸러냄

-걸러내기 위한 조건을 명시한 함수를 전달인자로 받음
ex)

//배열(arr)의 요소와 값(value)이 일치하는 새로운 배열 리턴
return arr.filter(function(el){
   return el===value
})

map: 모든 요소에게 동일한 행동을 준 값에 대해 모두 반환

ex)

//배열의 요소는 수이고, 각 요소를 2배 곱한 새로운 배열로 리턴
return arr.map(function(el){
   return el*2
})

reduce: 배열을 하나의 값으로 만들어줌

-초기값설정 가능, 정하지 않으면 배열의 첫번째 값이 초기값
-acc: 초기값, cur:누적값, initial value: 현재값
ex)

//배열의 요소는 number타입이고 배열의 모든 요소 합 리턴
let newarr=function(a,b){
  return a+b
}
return arr.reduce(newarr.)
//또는
return arr.reduce(function(acc,val){
  return acc+val;
})

compose: 입력받은 함수를 순서대로 결합하는 고차함수

forEach: 원소를 순서대로 모두 돌면서 함수를 실행

ex)

//특정 배열에 있는 원소를 다른 배열에 복사
let arr=[1,2,3];
let newarr=[];
arr.forEach((arr)=> newarr.push(arr));

sort: 지정된 함수에 따른 순서로 배열을 정렬.

  1. 배열안의 문자열(오름차순)
    ex)
let arr=[a,c, b];
array.sort();  //arr[a,b,c]
  1. 배열 안의 숫자(유니코드로 정렬)
    ex)
let arr=[1, 4,21];
array.sort(); //arr[1,21,4]

이때는 비교함수를 이용하여

function(a,b) {return a-b};

이것을 오름차순으로 정렬된다.

  • a-b가 음수이면, a 다음 b
  • a-b가 0이면, 아무일도 일어나지 않음.
  • a-b가 양수이면, b 다음 a

=> 적용을 하면 밑의 결과가 나온다.

let arr=[1, 4,21];
array.sort(function(a,b) {return a-b}); //arr[1,4,21]

0개의 댓글