일등함수 기능을 제공하는 언어에서는 함수는 "함수표현식"이라는 일종의 값입니다. 따라서 함수를 변수에도 담을 수 있습니다. 이 말은 함수표현식을 매개변수로 받을 수 있다는 것을 의미합니다. 이처럼 매개변수형태로 동작하는 함수를 콜백함수 라고 합니다
export const init = (callback: () => void):void =>{
console.log("defaykt initalization finished.");
callback();
console.log("all initialization finished.")
}
위 코드는 중간에 매개변수로 받은 callback에 담긴 함수 표현식을 실행합니다.
다음 코드는 앞서 구현한 init함수에 자신이 실행하려는 내용을 익명 함수로 전달합니다.
callback.ts
import {init} from "./init"
init(() => console.log("custom initialization finished."))
함수형 언어에서 함수는 변수에 담긴 함수 표현식이므로 함수안에 또 다른 함수를 중첩해서 구현할 수 있습니다.
const calc = (value: number, cd: (number)=>void: void) => {
let add =(a, b) => a + b
function multiply(a, b){return a * b}
let result = multiply(add(1, 2), value)
cd(result)
}
calc(30, (result: number) => console.log(`result is ${result}`))
// result is 90
고차함수(high-order function)은 또 다른 함수를 반환하는 함수를 말합니다. 함수형 언어에서 함수는 단순히 함수 표현식이라는 값이므로 다른 함수를 반환 할 수 있습니다.(고차함수 기능이 없다면 함수형 프로그래밍이 불가능할 정도로 매우 중요한 기능입니다)
const add1 = (a: number, b:number): number => a + b
const add2 = (a: number):(arg: number) => number =>(b:number) :number => a + b
//둘은 같은 내용이고 add2는 고차함수.
const result = add2(1)(3)
console.log(result) //4
3차 고차함수인 multiply에 함수 호출 연산자를 하나나 두개만 사용하면 아직 값이아닌 함수입니다. 이것을 부분 애플리케이션 혹은 부분 적용 함수라고 합니다.
const multiply = a => b => c => a * b * c