[JavaScript] 딥다이브 / 18장 함수와 일급 객체

ungnam·2023년 6월 21일
0
post-thumbnail

일급 객체

  1. 무명의 리터럴로 생성할 수 있다. 함수 표현식이 여기에 해당하며, 이 경우 런타임에 생성이 가능하다.
  2. 변수자료구조(객체, 배열 등)에 저장할 수 있다.
  3. 함수의 매개변수에 전달할 수 있다.
  4. 함수의 반환값으로 사용할 수 있다.

자바스크립트의 함수는 위의 조건을 모두 만족하므로 일급 객체이다. 함수를 다른 함수의 매개변수나 반환값으로 사용할 수 있다는 점은 함수형 프로그래밍을 가능케 하는 자바스크립트의 장점 중 하나다.

함수 객체의 프로퍼티

함수는 객체이므로 프로퍼티를 가질 수 있다.

arguments 프로퍼티

arguments 프로퍼티 값은 arguments 객체로, 함수 호출 시 전달된 인수들의 정보를 담고 있는 iterablearray-like object이다. 함수 외부에서는 참조할 수 없다.

매개변수의 개수보다 인수를 더 많이 전달한 경우 초과된 인수는 무시되지만, argument 객체의 프로퍼티로 보관된다. 따라서 매개변수 개수를 확정할 수 없는 가변 인자 함수를 구현할 때 유용하다.

caller 프로퍼티

함수 자신을 호출한 함수를 가리키는 비표준 프로퍼티이다. 호출한 함수가 없는 경우 프로퍼티는 null을 가리킨다.

length 프로퍼티

함수를 정의할 때 선언한 매개변수의 개수를 가리킨다.
인수의 개수를 나타내는 argument 객체의 length 프로퍼티와 구분할 필요가 있다.

name 프로퍼티

함수 이름을 나타내며, ES6에서 정식 표준이 된 프로퍼티이다.
익명 함수 표현식의 경우 ES5에서는 빈 문자열을 값으로 갖지만, ES6부터 함수 객체를 가리키는 식별자를 값으로 갖는다.

__proto__ 접근자 프로퍼티

함수 객체 고유의 프로퍼티가 아닌 프로토타입 객체인 Object.prototype 객체의 프로퍼티에게 상속받은 접근자 프로퍼티로, [[Prototype]] 내부 슬롯이 가리키는 프로토타입 객체에 간접적으로 접근하기 위해 사용한다.

참고) 객체의 프로토타입을 직접 변경하는 것은 매우 느린 작업(MDN)

prototype 프로퍼티

생성자 함수로 호출할 수 있는 함수 객체, 즉 constructor만이 소유하는 프로퍼티로, 생성자 함수로 호출될 때 생성자 함수가 생성할 인스턴스의 프로토타입 객체를 가리킨다.

profile
꾸준함을 잃지 말자.

0개의 댓글