전에 고차함수를 정리하여 적었는데 그 거의 일기처럼 적어서 이번에 다시 정리를 한번 해보자!!
✏️ 함수에 대해서
먼저 자바스크립트에서는 비행기 좌석에 "퍼스트 클래스" 처럼 특별한 대우를 받는 것이 있는데 그런 대우를 받는 것들을 일급객체라고 한다. 그중에서도 우리가 배웠던 함수도 그 중에 하나다. 함수는 밑에와 같은 조건들을 가진다.
첫번째로는 변수에 할당 할 수 있다.
두번째로는 다른 함수의 인자로 전달될 수 있다.
세번째로는 다른함수의 결과로서 리턴될 수 있다.
자바스크립트에서는 함수의 표현식과 함수 선언식이 있는 데 우리가 자주 사용하고 배웠던건 함수 선언식이다. 밑에 표현된 식은 "변수에 함수를 할당하는 경우"을 코드로 작성을 한 것이다.
const square = function (num) {
return num * num;
};
output = square(7);
console.log(output);
고참함수란?🔍
고차함수는 함수를 인자로 받거나 함수를 리턴하는 함수를 말한다. 이 때 다른 함수의 인자로 전달되는 함수를 콜백함수라고 말한다. 콜백 함수를 전달받은 함수는 이 콜백 함수를 호출(invoke)할 수 있다.
콜백 함수를 전달받은 함수는 이 콜백 함수를 호출 할 수 있다. 다른 함수는 조건에 따라 콜백 함수의 실행 여부를 결정할 수도 있으며 심지어 여러 번 실행도 가능하다. 특히 콜백 함수는 어떤 작업이 완료되었을 때 호출되는 경우가 많아서 답신 전화를 뜻하는 "콜백"이라는 이름이 붙여졌다.
한편으로 "함수를 리턴하는 함수"만을 일컫는 용어가 따로 존재하고 실제로도 많이 사용을 한다고 한다. 이런 함수를 만든 논리학자 하스켈 커리의 이름을 따라서 "커리 함수"라고 한다고 한다. 따로 커리 함수라는 용어를 사용하는 경우, 고차 함수란 용어를 '함수를 인자로 받는 함수'에만 한정지어서 사용한다. 하지만 엄밀한 의미에서 고차 함수는 커리 함수를 포함한다.
고차함수의 작성예시💻
1. 다른 함수를 인자로 받는 경우
function double(num) {
return num * 2;
}
function doubleNum(func, num) {
return func(num);
}
let output = doubleNum(double, 4);
console.log(output);
2. 함수를 리턴하는 경우
function adder(added) {
return function (num) {
return num + added;
};
}
let output = adder(5)(3);
console.log(output);
const add3 = adder(3);
output = add3(2);
console.log(output);
3.함수를 인자로 받고, 함수를 리턴하는 경우
function double(num) {
return num * 2;
}
function doubleAdder(added, func) {
const doubled = func(added);
return function (num) {
return num + doubled;
};
}
doubleAdder(5, double)(3);
const addTwice3 = doubleAdder(3, double);
addTwice3(2);
고차함수는 자바스크립트에서 자주 사용하는 함수이기에 더 복습하고 코플릿을 풀면서 개념을 익히는 습관을 길러야겠다✌️