5/24 section 2의 첫 날
조금 더 넓게 생각하고 나눠서 생각하자
: 특별한 대우를 받는다
- 변수에 할당할 수 있다
- 다른 함수에 전달인자로 전달될 수 있다
- 다른 함수의 결과로서 리턴될 수 있다.
-> ❗️자바스크립트에서 함수는 일급객체다
: 함수가 일급객체이기 때문에 고차함수로 활용할 수 있다.
변수에 할당하지 않고 바로 사용할 수 있다.
- 다른 함수를 전달인자로 받거나
- 다른 함수의 결과로서 리턴되는 함수
-> 둘 중 하나의 조건을 충족하면 고차함수라고 할 수 있다.
callback function
: 다른 함수의 전달인자로 들어가는 함수
caller
: 콜백함수를 전달받은 고차함수
invoke
: caller가 함수 내부에서 callback function을 호출하는 것
다른 함수의 결과로서 리턴되는 함수
=> 커링함수 (by. 하스켈 커리)
=> 클로져 (외부 함수의 변수에 접근할 수 있는 내부 함수일 때)
자바스크립트에 기본 내장되어 있는 고차함수
배열의 각 요소
가 특정 논리(함수)
에 의해 따로 분류(filter)
된다.arr.filter(callback(element[, index[, array]])[, thisArg])
arr.filter((element, index, array) => {return ...})
const array = [1, 2, 3, 4, 5];
const overOne = array.filter(function (el) {
return el > 1; //1보다 큰 요소들만 반환하게 된다.
});
console.log(overOne);
>[2, 3, 4, 5]
배열의 각 요소
가 특정 논리(함수)
에 의해 다른 요소로 지정(map)
된다.array.map(모든 요소에 적용할 함수)
arr.map(callback(currentValue[, index[, array]])[, thisArg])
arr.map(function(cur, index, array) {return ...})
//1
const array = [1, 2, 3, 4, 5];
const overOne = array.map(function (el) {
return el > 1; //1보다 큰지 비교하게 된다.
});
console.log(overOne);
>[false, true, true, true, true]
//2
const array = [1, 2, 3, 4, 5];
const double = array.map(function (el) {
return el * 2; //각 요소에 2를 곱한다.
});
console.log(double);
>[2, 4, 6, 8, 10]
배열의 각 요소
를 특정 방법(함수)
에 따라 원하는 하나의 형태로 응축(reduction)
한다.arr.reduce(callback[, initialValue])
arr.reduce((accumulator, currentValue, currentIndex, array) => {return ... }, initialValue)
arr.reduce((acc, cur) => acc + cur, 1)
: 주어진 함수를 배열의 각 요소에 실행한다
let array = new Array(1, 2, 3);
let arrayIs = array.forEach(function (ele) {
console.log( ele + '입니다.')
});
console.log(arrayIs);
>1입니다.
>2입니다.
>3입니다.
: 주어진 논리(함수)를 만족하는 첫 번째 요소를 반환한다.
없을 시, undefined 반환
let array = new Array(1, 2, 3);
let isIt = array.find(ele => ele > 0)
console.log(isIt);
>1
: 문자열의 유니코드 코드 포인트를 따라 적절한 순서로 배열의 요소를 정렬한다.
const winter = ['winter', 'Jan', 'Feb', 'Dec'];
months.sort();
console.log(winter);
>['Dec', 'Feb', 'Jan', 'winter'] //알파벳 순서로 정렬
: 해당 조건(함수)을 만족시키는 요소가 배열에 1개 이상 존재하면 true, 없으면 false를 반환한다.
const may = ['summer', 'rose', 5, 'strawberry'];
const isMay = (element) => element === 5;
const isJune = (element) => element === 6;
may.some(isMay);
>true
may.some(isJune);
>false
: 해당 조건(함수)을 배열의 모든 요소가 만족하면 true, 그렇지 않으면 false를 반환한다.
const may = ['summer', 'rose', 5, 'strawberry'];
const isMay = (element) => element === 5;
may.every(isMay);
>false