함수를 인자(argument)로 받거나 함수를 리턴하는 함수
다른 함수를 인자로 받는 경우function double(num) { // 콜백함수 return num * 2; } function doubleNum(func, num) { //고차함수 return func(num); } let output = doubleNum(double, 4); console.log(output); // -> 8
함수를 리턴하는 경우
function adder(added) { // 고차함수(익명 함수 사용) return function (num) { // 익명함수 return num + added; }; } let output = adder(5)(3); // -> 8 console.log(output); // -> 8 // adder가 리턴하는 함수를 변수에 저장 가능 // javascript에서 함수는 일급 객체이기 때문 const add3 = adder(3); output = add3(2); console.log(output); // -> 5
함수를 인자로 받고, 함수를 리턴하는 경우
function double(num) { // 콜백함수 return num * 2; } function doubleAdder(added, func) { //고차함수 const doubled = func(added); return function (num) { return num + doubled; }; } doubleAdder(5, double)(3); // -> 13 // doubleAdder가 리턴하는 함수를 변수에 저장 가능 (일급 객체) const addTwice3 = doubleAdder(3, double); addTwice3(2); // --> 8
다른 함수(caller)의 인자로 전달되는 함수
콜백함수를 전달받은 함수는 이 콜백함수를 호출(invoke)할 수 있다
다른 객체들에 일반적으로 적용 가능한 연산을 모두 지원하는 객체를 의미
JavaScript에서 함수를 일급객체로 취급 하는것은
변수에 할당(assigment)할 수 있다
다른 함수의 인자(argument)로 전달될 수 있다
다른 함수의 결과로서 리턴될 수 있다
forEach
주어진 함수를 배열 배열 요소 각각에 대해 실행(간단한 반복문)const a = [1,2,3,4,5]; a.forEach(function(el){ console.log(el); // 1,2,3,4,5 })
find
주어진 판별 함수를 만족하는 첫 번째 요소의 값을 반환하는 메소드const a = [1,2,3,4,5]; a.find(function(el) { return el > 3 console.log(el); // 4 })
filter
주어진 함수의 테스트를 통과하는 모든 요소를 모아 새로운 배열로 반환
배열의 각 요소가
특정 논리(함수)에 따르면, 사실(boolean)일 때
따로 분류한다(filter)const a = [1,2,3,4,5]; a.filter(function(el) { return el % 2 === 0 console.log(el); // [2,4] })
map
배열 내의 모든 요소 각각에 대하여 주어진 함수를 호출한 결과를 모아 새로운 배열로 반환
배열의 각 요소가
특정 논리(함수)에 의해
다른 요소로 지정(map)된다const a = [1,2,3,4,5]; a.map(function(el) { return el * 2 console.log(el); // [2,4,6,8,10] })
reduce
배열의 각 요소에 대해 주어진 리듀서(reducer)함수를 실행하고, 하나의 결과값을 반환
배열의 각 요소를
특정 응축 방법(함수)에 따라
원하는 하나의 형태로
응축한다(reduction)
accumulator: 누산기(acc)
currentValue: 현재 값(cur)
currentIndex: 현재 인덱스(idx)
array: 원본 배열(src)const array = [1,2,3,4,5]; array.reduece(function(acc, cur) { return acc + cur }, 0) // 15
sort
배열의 요소를 적절한 위치(일반적으로 사전식 정렬)에 정렬한 후 그 배열을 반환
복사본이 아닌 원배열 정렬const a = [1, 30, 4, 21, 10000]; a.sort(); console.log(a); // [1, 10000, 21, 30, 4] const a = ['March', 'Jan', 'Feb', 'Dec']; a.sort(); console.log(a); // ['Dec', 'Feb', 'Jan', 'March']
some
배열 안의 어떤 요소(or)라도 주어진 판별 함수를 통과하는지 테스트
빈 배열을 호출하면 무조건 falseconst a = [1, 2, 3, 4, 5]; a.some(function(el) { return el % 2 === 0 console.log(a); // true })
every
배열 안의 모든 요소(and)가 주어진 판별 함수를 통과하는지 테스트
빈 배열을 호출하면 무조건 trueconst a = [1, 30, 39, 29, 10, 13]; a.every(function(el) { return el < 40 console.log(a); // true })