Skip to content

Latest commit

 

History

History
79 lines (57 loc) · 3.54 KB

File metadata and controls

79 lines (57 loc) · 3.54 KB

18.1 일급 객체

  1. 무명의 리터럴을 생성할 수 있다. 즉, 런타임에 생성 가능하다.
  2. 변수나 자료구조(객체,배열 등)에 저장할 수 있다.
  3. 함수의 매개변수에 전달할 수 있다.
  4. 함수의 반환값으로 사용할 수 있다.

❓ 함수가 일급 객체라는 뜻이란

  • 함수를 객체와 동일하게 사용할 수 있다는 의미 ⇒ 함수의 매개변수 or 함수의 반환값으로 사용 가능 (함수형 프로그래밍)
  • 함수는 값을 사용할 수 있는 곳(변수 할당문, 객체의 프로퍼티 값, 배열의 요소, 함수 호출의 인수, 함수 반환문)이라면 어디서든지 리터럴로 정의 가능하며, 런타임에 함수 객체로 표현된다.
// 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

18.2 함수 객체의 프로퍼티

  • 함수는 객체로서 프로퍼티를 소유할 수 있다. (일반 객체와 차이점)
  • arguments, caller, length, name, prototype 프로퍼티는 모두 함수 객체의 데이터 프로퍼티다.
  • __proto__는 접근자 프로퍼티로 함수 객체 고유의 프로퍼티는 아니라 Object.prototype 객체의 프로퍼티를 상속 받은 것으로 모든 객체가 사용 가능하다

    프로퍼티(property)는 객체 지향 프로그래밍 언어에서 사용되는 클래스 멤버의 일종으로, 필드와 메소드의 중간 역할을 합니다. 프로퍼티는 "키(key)"와 "값(value)"의 형태로 구성되며, 객체 내부의 속성을 의미합니다.

18.2.1 arguments 프로퍼티

  • 함수 호출 시 전달된 인수들의 정보를 담고 있는 순회 가능(iterable)한 유사 배열 객체로, 함수 내부에서 지역 변수처럼 사용된다. ⇒ 함수 외부에서 참조 불가능
  • ES3부터 표준에서 폐지됨

18.2.2 caller 프로퍼티

  • 비표준 프로퍼티

18.2.3 length 프로퍼티

  • 함수를 정의할 때 선언한 매개변수의 개수를 가리킴
  • arguments 객체의 length 프로퍼티 == 인자(arguments)의 개수 함수 객체의 length 프로퍼티 == 매개변수(parameter)의 개수

18.2.4 name 프로퍼티

  • 함수 이름을 나타냄
  • ES6부터 정식 표준되었음 ⇒ 함수 객체를 가리키는 식별자를 값으로 갖는다.

18.2.5 proto 접근자 프로퍼티

  • 모든 객체는 [[Prototype]]이라는 내부 슬롯을 갖는데 상속을 구현하는 프로토타입 객체를 가리킴

18.2.6 prototype 프로퍼티

  • 생성자 함수로 호출할 수 있는 함수 객체로 constructor만 소유하는 프로퍼티다.
  • 일반 객체와 생성자 함수로 호출할 수 없는 non-constructor에는 따로 존재하지 않는다.
  • 함수가 객체를 생성하는 생성자 함수로 호출될 때 생성자 함수가 생성할 인스턴스의 프로토타입 객체를 가리킨다.