[JS, Node] 고차함수

윤태영 | Taeyoung Yoon·2021년 12월 2일
0

TIL (Today I Learned)

목록 보기
18/53
post-thumbnail

일급 객체(First-class citizen)

대표적인 일급 객체 중 하나가 함수이다.

함수의 특별 취급

  • 변수에 할당(assignment)할 수 있다. <---- 함수를 데이터처럼 다룰 수 있다.
  • 다른 함수의 인자(argument)로 전달될 수 있다.
  • 다른 함수의 결과로서 리턴될 수 있다.

호이스팅

  • 호이스팅은 선언된 위치에 관계없이 어디서든 함수를 사용할 수 있도록 한다.
  • 함수 선언부를 코드의 최상단으로 끌어올리는 것처럼 보이게 한다.
  • var변수 선언함수 선언식에서만 일어나며 호이스팅에 의존하면 코드 유지보수가 쉽지않다.

고차함수 (Higher order function)

고차 함수는 함수를 인자로 받을 수 있고, 함수의 형태로 리턴할 수 있는 함수이다.

'함수를 인자로 받는 함수'를 커리 함수라 한다.
'다른 함수에 인자로 들어가는 함수'를 콜백 함수라 한다.

내장 고차 함수 (Built-in higher order function)

자바스크립트에는 기본적으로 내장된 고차함수가 여럿 있다.

map

모든 요소에게 동일한 함수를 주어 모두 반환한다.
기존배열을 수정하지 않는다.

예시 코드

let arr = [1, 2, 3];
let result = arr.map(function(ele) {return ele * 2});
result; // [2, 4, 6]

해석

let 배열변수 = 요소를담은배열
let 결과배열변수 = 배열변수.map(function(모든요소){return 모든요소 * 2})
결과배열변수 // 함수에 의해 변한 모든요소를 담은 배열

filter

모든 요소 중 함수에 맞는 요소만 반환한다.
기존배열을 수정하지 않는다.

예시 코드

let arr = [1, 2, 3];
let result = arr.filter(function(ele){return ele % 2 !== 0});
result; // [1, 3]

해석

let 배열변수 = 요소를담은배열;
let 결과배열변수 = 배열변수.filter(function(모든요소){return 조건});
결과배열변수; // 조건에 맞는 요소를 담은 배열

reduce

모든 요소를 함수로 하나의 값으로 만들어 반환한다.
초기값(별도로 지정하지않으면 첫번째 요소)와 현재값을 행동해 누적값 반환

예시 코드

let arr = [1, 2, 3];
let init = 0;
let result = arr.reduce(function(pre, cur){return pre + cur}, init);
result; // 6

해석

let 배열변수 = 요소를담은배열;
let 초기값 = 0;
let 결과배열변수 = 배열변수.reduce(function(이전값, 현재값){return 이전값 + 현재값}, 초기값);
result; // 초기값 + 현재값1(이전값) + 현재값2...의 결과값

forEach

함수를 모든 요소에 각각 실행한다.
기존배열을 수정하지 않는다.

예시 코드

let arr = [1, 2, 3];
let result = [];
arr.forEach(function(ele){result.push(ele + '번')});
result; // ['1번', '2번', '3번']

해석

let 배열변수 = 요소를담은배열
let 결과배열변수 = 빈배열
배열변수.forEach(function(모든요소){result.push(모든요소 + '번')});
result; // 모든요소가 ''번'을 붙여 빈배열에 넣어라'에 각각 동작했다.

find

모든 요소 중 함수에 맞는 첫번째 요소의 값만 반환한다.

예시 코드

let arr = [1, 2, 3];
let result = arr.find(function(ele){return ele % 2 !== 0});
result; // 1

해석

let 배열변수 = 요소를담은배열;
let 결과배열변수 = 배열변수.filter(function(모든요소){return 조건});
결과배열변수; // 조건에 맞는 첫번째 요소의 값

sort

모든 요소를 정렬한 후 그 배열을 반환한다.
기존배열이 수정된다.

예시 코드

let arr = [2, 3, 1, 10];
arr.sort(); // <-----------------------------유니코드순 정렬
console.log(arr);
arr.sort(function(a, b){return a - b}); //<---오름차순 정렬
console.log(arr); 
// [1, 10, 2, 3]
// [1, 2, 3, 10]

some

모든 요소중 하나라도 함수에 맞았는지 boolean값을 반환한다.
주어진 배열이 빈배열일 경우 false를 반환한다.

예시 코드

let arr = [1, 2, 3];
let result = arr.some(function(ele){return ele % 2 !== 0});
result; // true

해석

let 배열변수 = 요소를담은배열;
let 결과배열변수 = 배열변수.some(function(모든요소){return 조건});
결과배열변수; // 모든 요소중 하나라도 조건에 맞았는지의 boolean값

every

모든 요소가 함수에 맞았는지 boolean값을 반환한다.

예시 코드

let arr = [1, 2, 3];
let result = arr.every(function(ele){return ele % 2 !== 0});
result; // false

해석

let 배열변수 = 요소를담은배열;
let 결과배열변수 = 배열변수.every(function(모든요소){return 조건});
결과배열변수; // 모든 요소가 조건에 맞았는지의 boolean값

0개의 댓글