일급함수란?

함수를 다른 변수와 동일하게 다루는 언어는 일급 함수를 가졌다고 표현합니다. 예를 들어, 일급 함수를 가진 언어에서는 함수를 다른 함수에 매개변수로 제공하거나, 함수가 함수를 반환할 수 있으며, 변수에도 할당할 수 있습니다.

JavaScript의 일급함수

함수 할당

익명 함수를 변수에 할당하여 호출할 수 있습니다. 또한 매개변수의 값이 하나라면 괄호를 생략할 수 있습니다.

const add = (a) => a + 5
console.log(add) // a => a + 5
console.log(add(5)) // 10

함수 전달

함수를 매개변수로 전달하여 호출할 수도 있습니다. 이때 전달하는 함수는 호출하지 않고 함수 자체를 전달하여야 합니다.

const sayHello = () => "Hello"
const showHello = (msg, name) => console.log(`${msg()} ${name}`)
showHello(sayHello, "Javascript") // Hello Javascript
showHello(sayHello(), "Javascript") // Error

함수 반환

함수가 함수를 반환하는 형식도 작성이 가능합니다. 이를 자바스크립트에서는 고차 함수라 부릅니다. 또한 고차 함수를 호출 시에는 함수 자체를 반환하기 때문에 다른 변수에 저장하여 호출하거나 이중 괄호를 이용하여 호출합니다.

const sayHello = () => () => "Hello"
 
const myFunc = sayHello()
myFunc() // Hello
sayHello()() // Hello

참고