[JS] 자바스크립트의 함수 === 일급 객체

초코침·2023년 4월 15일
0

JavaScript

목록 보기
26/26
post-thumbnail

다음 조건을 만족하는 객체를 일급 객체라 한다.

  1. 무명의 리터럴로 생성할 수 있다. (런타임에 생성할 수 있다.)
  2. 변수나 자료구조에 저장할 수 있다.
  3. 함수의 매개변수에 전달할 수 있다.
  4. 함수의 반환값으로 사용할 수 있다.

자바스크립트의 함수는 객체이며, 위 조건을 모두 만족하기 때문에 일급 객체다.

1. 무명의 리터럴로 생성할 수 있다.

함수 표현식으로 함수를 정의하는 경우 이름을 작성하지 않아도 되며, (함수 선언문으로 정의한 함수와는 다르게) 런타임에 생성된다.

const functionLiteral = function () {
  console.log('이 함수는 함수 리터럴로 정의되었습니다.');
};

2. 변수나 자료구조에 저장할 수 있다.

function canSave() {
  console.log('이 함수는 변수나 자료구조에 저장할 수 있습니다.');
}

const variable = canSave;
const array = [canSave];
const object = {
  func: canSave,
};

3. 함수의 매개변수에 전달할 수 있다.

function canBeArgument() {
  console.log('이 함수는 인수가 될 수 있습니다.');
}

function foo(func) {
  func();
}

foo(canBeArgument);

4. 함수의 반환값으로 사용할 수 있다.

function outerFunc() {
  function innerFunc() {
    console.log('이 함수는 중첩 함수입니다.');
  }

  return innerFunc;
}

const inner = outerFunc();
inner();

따라서 함수를 객체와 동일하게 사용할 수 있다. 즉, 함수를 값처럼 사용할 수 있다. 이는 함수형 프로그래밍이 가능한 이유다.

단, 함수와 객체는 차이가 존재한다.

함수와 객체의 차이

함수: 호출할 수 있다. 함수만 갖는 고유 프로퍼티가 있다.
객체: 호출할 수 없다.

profile
블로그 이사중 🚚 (https://sungjihyun.vercel.app)

0개의 댓글