const square = function(x) {
return x * x;
}
square(5); //25
const foo = square;
foo(6); //36
function double(num) {
return num * 2;
}
function doubleNum(func, num) {
return func(num);
}
function adder(added) {
return function (num) {
return num + added;
};
}
console.log("1");
console.log("2");
console.log("3");
// 1, 2, 3
console.log("1");
setTimeout(function b(){
console.log("2");
}, 1000); //1초 뒤에 2를 출력
console.log("3");
// 1, 3, 2
이런 비동기적 처리를 위해 이용하는 함수를 콜백함수라고 하며 함수의 동작 시점을 컨트롤 할 수 있는 것이다.
forEach
, find
, filter
, map
, reduce
, sort
, some
, every
대표적으로 배열의 고차함수 filter
, map
, reduce
에 다루어 보겠다
// 출판 연도가 2003년인 책을 담은 배열을 만들기
//조건(콜백함수): 출판 연도가 2003인지 확인
// 단행본 모음
const cartoons = [
{
id: 1,
bookType: 'cartoon',
title: '식객',
subtitle: '어머니의 쌀',
createdAt: '2003-09-09',
genre: '요리',
artist: '허영만',
averageScore: 9.66,
},
{
id: 2,
// .. 이하 생략
},
// ... 이하 생략
];
// 단행본 한 권의 출판 연도가 2003인지 확인하는 함수
const isCreatedAt2003 = function (cartoon) {
const fullYear = new Date(cartoon.createdAt).getFullYear()
return fullYear === 2003;
};
// 출판 연도가 2003년인 책의 모음
const filteredCartoons = cartoons.filter(isCreatedAt2003);
// 각 책의 부제(subtitle)만 담은 배열을 만들기
//조건(콜백함수): 책 한 권의 부제를 찾기
// 기존 배열
const cartoons = [
{
id: 1,
bookType: 'cartoon',
title: '식객',
subtitle: '어머니의 쌀',
createdAt: '2003-09-09',
genre: '요리',
artist: '허영만',
averageScore: 9.66,
},
{
id: 2,
// .. 이하 생략
},
// ... 이하 생략
];
// 만화책 한 권의 부제를 리턴하는 함수
const findSubtitle = function (cartoon) {
return cartoon.subtitle; //참이면 리턴 = 배열에 값 추가
};
// 각 책의 부제 배열
const subtitles = cartoons.map(findSubtitle); // ['어머니의 쌀', ...]
// 단행본 모음
// 모든 책의 평점을 누적한 평균 구하기
//조건(콜백함수): sum에 각 책의 평점을 더함
const cartoons = [
{
id: 1,
bookType: 'cartoon',
title: '식객',
subtitle: '어머니의 쌀',
createdAt: '2003-09-09',
genre: '요리',
artist: '허영만',
averageScore: 9.66,
},
{
id: 2,
// .. 이하 생략
},
// ... 이하 생략
];
// 단행본 한 권의 평점을 누적값에 더한다.
const scoreReducer = function (sum, cartoon) {
return sum + cartoon.averageScore;
};
// 초기값에 0을 주고, 숫자의 형태로 평점을 누적한다.
let initialValue = 0
// 모든 책의 평점을 누적한 평균을 구한다.
//콜백함수로 구해진 평점의 총합을 배열의 길이로 나누어 평균을 구함
const cartoonsAvgScore = cartoons.reduce(scoreReducer, initialValue) / cartoons.length;
자바스크립트를 비롯한 많은 프로그래밍 언어는 추상화의 결과이다 우리가 자바스크립트 코드를 입력했을 때, 어떤 과정을 거쳐 결과가 출력되는지 몰라도 웹에서 결과는 확인할 수 있다 그런 복잡한 것들은 자바스크립트 해석기가 대신해 주기 때문이다
우리는 자바스크립의 문법을 올바르게 사용하는 것만으로, 다양한 프로그램을 보다 쉽게 작성할 수 있다 이처럼 문제의 해결이 더 쉬워지는 것이 추상화의 이점이다