EnJinnier
JS Deep Dive - 18. 함수와 일급 객체 본문
18.1 일급 객체
위의 조건을 만족하는 객체를 일급 객체라고 한다.
자바스크립트의 함수는 다음 예제와 같이 위의 조건을 모두 만족하므로 일급 객체다.
따라서, 함수가 일급 객체라는 것은 함수를 객체와 동일하게 사용할 수 있다는 의미다.
일급객체로서 함수가 가지는 가장 큰 특징은 일반 객체와 같이 함수의 매개변수에 전달할 수 있으며,
함수의 반환값으로 사용할수도 있다는 것이다. (단, 일반객체는 호출할수 없지만 함수 객체는 호출할수 있고,
함수 객체는 일반 객체에는 없는 함수 고유의 프로퍼티를 소유한다는 차이점이 있다.)
18.2 함수 객체의 프로퍼티
함수는 객체이므로 함수도 프로퍼티를 가질 수 있다.
브라우저 콘솔에서 console.dir 메서드를 사용하여 함수 객체의 내부를 들여다볼 수 있다.

arguments, caller, length, name, prototype 프로퍼티 : 함수 객체의 데이터 프로퍼티(일반 객체에는 없는 함수 객체 고유의 프로퍼티)
__proto__ : 접근자 프로퍼티. 함수 객체 고유의 프로퍼티가 아니라 object.prototype 객쳬의 프로퍼티를 상속받은 것.
arguments 프로퍼티
프로퍼티 값: arguments객체.
함수호출시 전달된 인수argument들의 정보를 담고 있는 순회 가능한 유사배열객체
매개변수의 개수보다 인수를 더 많이 전달한 경우 초과된 인수는무시됨.
그렇다고 초과된 인수가 버려지는 것은 아니고 모든 인수는 암묵적으로 arguments 객체의 프로퍼티로 보관된다.
=> arguments 객체는 매개변수 개수를 확정할 수 없는 가변인자함수를 구현할때 유용하다.

caller 프로퍼티
함수 자신을 호출한 함수를 가리킴
length 프로퍼티
함수를 정의할 때 선언한 매개변수의 개수를 가리킴
(arguments 객체의 length 프로퍼티 =/= length 프로퍼티 )
arguments 객체의length 프로퍼티는 인자argument의개수를가리키고,
함수 객체의 length 프로퍼티는 매개 변수parameter의개수를 가리킴.
name 프로퍼티
ES6 기준 함수 객체를 가리키는 식별자를 값으로 갖는다.
(ES5에서 name 프로퍼티는 빈 문자열을 값으로 가짐.)
__proto__ 접근자 프로퍼티
[[Prototype]] 내부 슬롯이 가리키는 프로토타입 객체에 접근하기 위해 사용하는 접근자 프로퍼티.
prototype 프로퍼티
생성자 함수로 호출할 수 있는 함수 객체(=constructor)만이 소유하는 프로퍼티.
함수가 객체를 생성하는 생성자 함수로 호출될 때 생성자 함수가 생성할 인스턴스의 프로토타입 객체를 가리킴.
'스터디 > 모던 자바스크립트 Deep Dive' 카테고리의 다른 글
JS Deep Dive - 20. strict mode (0) | 2024.05.14 |
---|---|
JS Deep Dive - 19. 프로토타입 (0) | 2024.05.10 |
JS Deep Dive - 17. 생성자 함수에 의한 객체 생성 (0) | 2024.05.02 |
JS Deep Dive - 16. 프로퍼티 어트리뷰트 (0) | 2024.04.28 |
JS Deep Dive - 15. let, const 키워드와 블록 레벨 스코프 (0) | 2024.04.26 |