
특별한 대우를 받는 객체
JavaScript에는 특별한 대우를 받는 일급객체가 있는데, 가장 대표적인 것이 바로 함수이다.
특별한 대우를 받는 일급객체인 고차함수는 다음과 같은 특징을 갖는다.
function double(num){
return num * 2;
}
function doubleNum(func, num){
return func(num);
}
let output = doubleNum(double, 4);
위의 코드처럼 함수를 다른 함수의 전달인자로 사용할 수 있는데, 이 때 전달인자로 들어간 함수를 콜백함수라고 부른다.
조건에 맞는 데이터만 분류할 때 사용
let arr = [1,2,3,4,5];
return arr.filter((el) => {
return el % 2 === 0;
})
위의 코드는 arr의 원소 중 짝수인 요소만 따로 모아 새로운 배열로 리턴해준다.
즉, filter의 파라미터로 들어온 함수의 리턴값이 true인 요소만 수집해준다.
이때, filter메소드는 immutable이므로 원본이 수정되지 않고, 새로운 주소값을 같는 배열을 리턴해준다.
각 요소에 대해 연산을 수행한 값으로 바꿔 새로운 배열로 리턴
let arr = [1,2,3,4,5];
return arr.map((el) => {
return el * 2;
}
map메소드의 파라미터로 받은 함수를 수행했을 때, arr의 각 요소는 2가 곱해진 값이 바뀌게 된다.
그리고 그 바뀐 값을 요소로 갖는 새로운 배열로 리턴해준다.
여러 데이터를 하나의 데이터로 응축할 때 사용
let arr = [1,2,3,4,5];
retur arr.reduce((acc, cur){
return acc + cur;
}, 0);
reduce메소드는 파라미터로 acc(누적값), cur(현재값), 초기값을 갖게 된다.
이때, 만약 초기값이 없다면 첫번째 acc값은 배열의 첫 번째 요소가 된다. (빈 배열일 때, 초기값이 없을 경우 오류 발생)
위의 코드로 예를 들어보면,
첫번째 호출
acc = 0
cur = 1
return 1
두번째 호출
acc = 1 (바로 전 호출의 리턴값)
cur = 2
return = 3
세번째 호출
acc = 3
cur = 3
return = 6
...
이러한 방식으로 진행된다.
복잡한 어떤 것을 압축해서 핵심만 추출한 상태
우리가 고차함수를 사용해서 특정기능을 고정시켜놓고 파라미터만 다르게 주는 것도 하나의 추상화 기법이다.
let add5 = (num) => {
return num + 5;
}
add5(3) // 8