본문 바로가기

스터디/[모던 자바스크립트 deep dive] JS

#18. 함수와 일급 객체

1. 일급 객체

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

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

2. 함수 객체의 프로퍼티

arguments 프로퍼티

  • 함수 객체의 arguments 프로퍼티 값은 arguments 객체
  • arguments 객체는 함수 호출 시 전달된 인수들의 정보를 담고 있는 순회 가능한 유사 배열 객체이며, 함수 내부에서 지역 변수처럼 사용됨
  • arguments 객체는 매개변수 개수를 확정할 수 없는 가변 인자 함수를 구현할 때 유용
  • arguments 객체는 배열 형태로 인자 정보를 담고 있지만 실제 배열이 아닌 유사 배열 객체
    • 유사 배열 객체 : length 프로퍼티를 가진 객체로 for 문으로 순회할 수 있는 객체를 의미

caller 프로퍼티

  • ECMAScript 사양에 포함되지 않은 비표준 프로퍼티
  • 이후 표준화될 예정도 없는 프로퍼티이므로 사용하지 말고 참고로만 알아두자

length 프로퍼티

  • 함수 객체의 length 프로퍼티는 함수를 정의할 때 선언한 매개변수의 개수를 가리킴

name 프로퍼티

  • 함수 객체의 name 프로퍼티는 함수 이름을 나타냄
  • name 프로퍼티는 ES6 이전까지는 비표준이었다가 ES6 에서 정식 표준이 됨

__proto__ 접근자 프로퍼티

  • 모든 객체는 [[Prototype]]이라는 내부 슬롯을 가짐
    • [[Prototype]] 내부 슬롯은 객체지향 프로그래밍의 상속을 구현하는 프로토타입 객체를 가리킴
  • __proto__프로퍼티 : [[Prototype]] 내부 슬롯이 가리키는 프로토타입 객체에 접근하기 위해 사용하는 접근자 프로퍼티

prototype 프로퍼티

  • prototype 프로퍼티는 생성자 함수로 호출할 수 있는 함수 객체
  • constructor만이 소유하는 프로퍼티이고, 일반 객체와 생성자 함수로 호출할 수 없는 non-constructor에는 prototype 프로퍼티가 없음