1급 시민의 조건
1급 객체, 1급 함수도 존재
1급 함수는 런타임 생성이 가능하고 익명으로 생성이 가능할 경우
자바스크립트에서는 객체를 1급 시민으로 취급
고차 함수는 함수를 인자로 받을 수 있고, 함수의 형태로 리턴할 수 있는 함수
이때 다른 함수의 인자(argument)로 전달되는 함수를 콜백 함수라고 합
콜백 함수를 전달받은 고차 함수는, 함수 내부에서 이 콜백 함수를 호출(invoke) 할 수 있습니다. caller는 조건에 따라 콜백 함수의 실행 여부를 결정할 수 있음
function (num) {
return num * num;
}
function (func, num) {
return func(num);
}
function (num1) {
return function (num2) {
return num2 + num1;
};
}
function multi(num) {
return num * num;
}
function multiple(num1, func) {
const gobHaGi = func(num1);
return function (num2) {
return num2 * gobHaGi;
};
}
javascript에 미리저장되어 있는 함수(예시는 MDN의 예시를 가져옴)
const array1 = ['a', 'b', 'c'];
array1.forEach(element => console.log(element));
// expected output: "a"
// expected output: "b"
// expected output: "c"
const array1 = [5, 12, 8, 130, 44];
const found = array1.find(element => element > 10);
console.log(found);
// expected output: 12
const words = ['spray', 'limit', 'elite', 'exuberant', 'destruction', 'present'];
const result = words.filter(word => word.length > 6);
console.log(result);
// expected output: Array ["exuberant", "destruction", "present"]
const array1 = [1, 4, 9, 16];
// pass a function to map
const map1 = array1.map(x => x * 2);
console.log(map1);
// expected output: Array [2, 8, 18, 32]
const array1 = [1, 2, 3, 4];
const reducer = (accumulator, currentValue) => accumulator + currentValue;
// 1 + 2 + 3 + 4
console.log(array1.reduce(reducer));
// expected output: 10
// 5 + 1 + 2 + 3 + 4
console.log(array1.reduce(reducer, 5));
// expected output: 15
// 예시를 보고만 이해하기 힘드므로 mdn사이트와 다른 블로거들의 자료를 보자
const months = ['March', 'Jan', 'Feb', 'Dec'];
months.sort();
console.log(months);
// expected output: Array ["Dec", "Feb", "Jan", "March"]
const array1 = [1, 30, 4, 21, 100000];
array1.sort();
console.log(array1);
// expected output: Array [1, 100000, 21, 30, 4]
const array = [1, 2, 3, 4, 5];
// checks whether an element is even
const even = (element) => element % 2 === 0;
console.log(array.some(even));
// expected output: true
const isBelowThreshold = (currentValue) => currentValue < 40;
const array1 = [1, 30, 39, 29, 10, 13];
console.log(array1.every(isBelowThreshold));
// expected output: true
내장 고차함수는 다양하게 존재하며 위에 나와있는것을 응용하여 다양한 방법으로 내장함수를 이용할 수 있고 해야한다.
arguments 객체
함수에 전달된 인수에 해당하는 Array 형태의 객체
function(a, b, c) {}
에 대해서 arguments[0] === a
arguments[1] === b
arguments[2] === c
전달된 인수가 배열형태의 객체
arguments 객체는 Array가 아니다
Array와 비슷하지만, length 빼고는 pop()과 같은 어떤 Array 속성도 없다. 그러나 실제 Array로 변환할 수 있다.
flat()
모든 하위 배열 요소를 지정한 깊이까지 재귀적으로 이어붙인 새로운 배열을 생성
const arr1 = [1, 2, [3, 4]];
arr1.flat();
// [1, 2, 3, 4]
const arr2 = [1, 2, [3, 4, [5, 6]]];
arr2.flat();
// [1, 2, 3, 4, [5, 6]]
const arr3 = [1, 2, [3, 4, [5, 6]]];
arr3.flat(2);
// [1, 2, 3, 4, 5, 6]
const arr4 = [1, 2, [3, 4, [5, 6, [7, 8, [9, 10]]]]];
arr4.flat(Infinity);
// [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
배열 평탄화에 효과적인 내장 고차함수
이번 TIL은 특히 쓸 내용이 없다. 내장 고차함수의 경우는 개념을 아는것도 중요하지만 그만큼 더 많이 사용을 해서 익숙해져야할거같다는 생각이 든다. 물론 내장 고차함수에 대해서 더 자세히 아는것도 중요하지만...