[JS] 고차함수

김동현·2021년 1월 23일
0

JavaScript

목록 보기
9/10

고차함수(Higher-order function)

함수를 인자(argument)로 받거나 함수를 리턴하는 함수
다른 함수를 인자로 받는 경우

function double(num) { // 콜백함수
  return num * 2;
}
function doubleNum(func, num) { //고차함수
  return func(num);
}
let output = doubleNum(double, 4);
console.log(output); // -> 8

함수를 리턴하는 경우

function adder(added) { // 고차함수(익명 함수 사용)
  return function (num) { // 익명함수
    return num + added;
  };
}
let output = adder(5)(3); // -> 8
console.log(output); // -> 8
// adder가 리턴하는 함수를 변수에 저장 가능
// javascript에서 함수는 일급 객체이기 때문
const add3 = adder(3);
output = add3(2);
console.log(output); // -> 5

함수를 인자로 받고, 함수를 리턴하는 경우

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
// doubleAdder가 리턴하는 함수를 변수에 저장 가능 (일급 객체)
const addTwice3 = doubleAdder(3, double);
addTwice3(2); // --> 8

콜백함수(callback function)

다른 함수(caller)의 인자로 전달되는 함수
콜백함수를 전달받은 함수는 이 콜백함수를 호출(invoke)할 수 있다

일급객체(First-class citizen)

다른 객체들에 일반적으로 적용 가능한 연산을 모두 지원하는 객체를 의미
JavaScript에서 함수를 일급객체로 취급 하는것은
변수에 할당(assigment)할 수 있다
다른 함수의 인자(argument)로 전달될 수 있다
다른 함수의 결과로서 리턴될 수 있다

배열 내장 메소드

forEach
주어진 함수를 배열 배열 요소 각각에 대해 실행(간단한 반복문)

const a = [1,2,3,4,5];
a.forEach(function(el){
	console.log(el); // 1,2,3,4,5
})

find
주어진 판별 함수를 만족하는 첫 번째 요소의 값을 반환하는 메소드

const a = [1,2,3,4,5];
a.find(function(el) {
  return el > 3
  console.log(el); // 4
})

filter
주어진 함수의 테스트를 통과하는 모든 요소를 모아 새로운 배열로 반환
배열의 각 요소가
특정 논리(함수)에 따르면, 사실(boolean)일 때
따로 분류한다(filter)

const a = [1,2,3,4,5];
a.filter(function(el) {
  return el % 2 === 0
  console.log(el); // [2,4]
})

map
배열 내의 모든 요소 각각에 대하여 주어진 함수를 호출한 결과를 모아 새로운 배열로 반환
배열의 각 요소가
특정 논리(함수)에 의해
다른 요소로 지정(map)된다

const a = [1,2,3,4,5];
a.map(function(el) {
  return el * 2
  console.log(el); // [2,4,6,8,10]
})

reduce
배열의 각 요소에 대해 주어진 리듀서(reducer)함수를 실행하고, 하나의 결과값을 반환
배열의 각 요소를
특정 응축 방법(함수)에 따라
원하는 하나의 형태로
응축한다(reduction)
accumulator: 누산기(acc)
currentValue: 현재 값(cur)
currentIndex: 현재 인덱스(idx)
array: 원본 배열(src)

const array = [1,2,3,4,5];
array.reduece(function(acc, cur) {
  return acc + cur
}, 0) // 15

sort
배열의 요소를 적절한 위치(일반적으로 사전식 정렬)에 정렬한 후 그 배열을 반환
복사본이 아닌 원배열 정렬

const a = [1, 30, 4, 21, 10000];
a.sort();
console.log(a); // [1, 10000, 21, 30, 4]
const a = ['March', 'Jan', 'Feb', 'Dec'];
a.sort();
console.log(a); // ['Dec', 'Feb', 'Jan', 'March']

some
배열 안의 어떤 요소(or)라도 주어진 판별 함수를 통과하는지 테스트
빈 배열을 호출하면 무조건 false

const a = [1, 2, 3, 4, 5];
a.some(function(el) {
  return el % 2 === 0
  console.log(a); // true
})

every
배열 안의 모든 요소(and)가 주어진 판별 함수를 통과하는지 테스트
빈 배열을 호출하면 무조건 true

const a = [1, 30, 39, 29, 10, 13];
a.every(function(el) {
  return el < 40
  console.log(a); // true
})
profile
개발자로서의 첫걸음

0개의 댓글