부수 효과를 최대한 멀리하고 조합성을 강조하는 프로그래밍 패러다임. 거의 모든 것을 순수 함수로 나누어 문제를 해결하는 것을 의미한다.
함수 내부의 작업이 함수 외부에 영향을 끼치는 것을 의미한다. 함수 내부에서 외부 변수의 값이 변경되거나 객체의 필드값이 변경되거나 콘솔 혹은 파일 I/O가 발생하면 이 함수는 부수 효과가 있다고 이야기한다.
함수의 결과가 오로지 입력된 매개변수를 통해서만 변경되는 함수를 이야기한다. 같은 인자를 받으면 같은 결과를 반환해야 한다. 즉 부수 효과가 없는 함수를 이야기한다.
객체가 다른 변수처럼 다루어질 때 일급 객체라고 한다. 다시 말해
만약 한 프로그래밍 언어에서 함수가 다른 변수처럼 다루어지면 이 프로그래밍 언어는 일급 함수를 가진다고 표현한다. 자바스크립트는 함수를 변수처럼 다룰 수 있으므로 자바스크립트 함수는 일급 함수이다.
// 변수에 함수 할당
const foo = () => {
console.log("foooooo");
};
foo();
// 함수에 인자로 전달
function sayHello() {
return "Hello, ";
}
function greeting(helloMessage, name) {
console.log(helloMessage() + name);
}
greeting(sayHello, "dokyung!");
// 함수를 반환
function sayHello() {
return () => {
console.log("Hello!");
};
}