함수와 일급 객체

장석원·2024년 7월 28일

일급 객체 의 조건

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

자바스크립트의 함수는 위의 조건을 모두 만족하므로 일급 객체이다.

// 1. 함수는 무명의 리터럴로 생성할 수 있다.
// 2. 함수는 변수에 저장할 수 있다.
// 런타임(할당 단계)에 함수 리터럴이 평가되어 함수 객체가 생성되고 변수에 할당된다.
const increase = function (num) {
  return ++num;
};

const decrease = function (num) {
  return --num;
};

// 2. 함수는 객체에 저장할 수 있다.
const auxs = { increase, decrease };

// 3. 함수의 매개변수에게 전달할 수 있다.
// 4. 함수의 반환값으로 사용할 수 있다.
function makeCounter(aux) {
  let num = 0;

  return function () {
    num = aux(num);
    return num;
  };
}

// 3. 함수는 매개변수에게 함수를 전달할 수 있다.
const increaser = makeCounter(auxs.increase);
console.log(increaser()); // 1
console.log(increaser()); // 2

// 3. 함수는 매개변수에게 함수를 전달할 수 있다.
const decreaser = makeCounter(auxs.decrease);
console.log(decreaser()); // -1
console.log(decreaser()); // -2

함수가 일급 객체라는 것은 함수를 객체와 동일하게 사용할 수 있다는 의미.
런타임에 함수객체로 평가됨.

일반 객체 vs 함수 객체
일반 객체 호출 불가능
함수 객체는 호출가능, 일반 객체에는 없는 함수 고유의 프로퍼티를 소유

console.dir로 프로퍼티 확인가능

0개의 댓글