일급 객체란 다른 객체들에 일반적으로 적용 가능한 연산을 모두 지원하는 객체를 가리킨다. 보통 함수에 매개변수로 넘기기, 수정하기, 변수에 대입하기와 같은 연산을 지원할 때 일급 객체라고 한다.
일급 객체의 특성은 다음과 같다.
자바스크립트의 함수는 위의 조건을 만족하므로 일급 객체가 되고, 일급 함수란 함수를 일급 객체로 취급하는 것을 말한다.
함수가 일급 객체라는 것은 함수를 객체와 동일하게 사용할 수 있다는 의미이고, 객체는 값이므로 이는 결국 함수를 값과 동일하게 취급할 수 있다는 말이 된다.
쉽게 말하자면, '함수'라는 대상이 '값'으로서 사용될 수 있다고 생각하면 된다.
프로그래밍 언어에서 함수가 다른 변수처럼 다뤄질 수 있을 때, 그 언어는 일급 함수를 가졌다고 한다.
일급 함수는 다음 3가지 조건을 만족해야 한다.
함수를 다른 함수의 전달인자로 넘기기
참고:
다른 함수에 전달인자로 전달하는 함수를 콜백 함수라고 한다. 따라서 sayHello()는 콜백 함수이다.
함수를 반환하기
참고:
함수를 반환하거나 다른 함수들을 전달인자로서 사용하는 함수를 고차 함수라고 한다.
JavaScript에서 함수들은 값으로 다루어질 수 있으므로 함수를 반환할 수 있다.
변수에 함수를 할당하기
따라서, 일급 함수의 조건에 따라 자바스크립트는 다음과 같은 것들을 할 수 있다.