고차함수에 대해 적기 전에 일급객체를 먼저 알아볼 필요가 있을 것 같다.
함수는 자바스크립트에서 일급객체로 분류된다. 그 말은 특별하게 취급된다는 의미를 부여해도 될 것 같다.
1. 변수에 담길 수 있고,
const foo = boo()
2. 파라미터로 받을 수도 있고,
function foo(func, num){
let double = func(num)
return double
}
3. 반환값(return value로도 사용될 수도 있다.
function foo(){
return function(){
console.log('return function')
}
고차함수(higher order function)는 함수를 인자로 받거나 함수를 리턴하는 함수를 말하고 이때 인자로 전달되는 함수는 콜백 함수라고 한다. 콜백 함수는 조건에 따라 실행될 수도 안될 수도 있고 여러번 실행될 수도 있다.
function add1(num){
return num + 1
}
function addnum(func, num){
return func(num)
}
console.log(addnum(add1, 4)) //==> 5
function add1num(num){
return function(num){
return num + 1
}
}
console.log(add1num(3)) // ==> 4
function add1(num){
return num + 1
}
function AddnMul(num, add1){
let added = add1(num)
return function(mulnum){
return added * mulnum
}
}
console.log(addnmul(4, add1)(2)) // ==> 10 // (4 + 1) * 2