[딥다이브] 함수객체와 일급객체

MOONJUNG·2022년 11월 29일
0

TIL

목록 보기
3/5
post-thumbnail

일급객체의 조건

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

함수객체

함수 = 일급객체 = 객체

일반객체 vs 함수객체

일반 객체 호출X
함수 객체 호출O, 함수 고유의 프로퍼티O

함수 객체의 데이터 프로퍼티

종류 arguments, caller, length, name, prototype

1. arguments 프로퍼티

  • arguments 프로퍼티 값 = arguments 객체
  • 함수 호출 시 전달된 인수들의 정보를 담고 있는 순회 가능한 유사 배열 객체
  • 함수 내부에서 지역 변수처럼 사용
  • 함수 외부에서 참조할 수 없다X
  • 현재 일부 브라우저에서 지원
  • ES3부터 표준에서 폐지
  • Function.arguments 사용 권장X
  • 인수를 프로퍼티 값으로 소유
  • 프로퍼티 키는 인수의 순서를 나타낸다
  • 매개변수 개수를 확정할 수 없는 가변 인자 함수를 구현할 때 유용
  • arguments 객체의 length 프로퍼티 = 인자 개수

2. caller 프로퍼티

  • ECMMAScript 사양에 포함되지 않는 비표준 프로퍼티
  • 함수 자신을 호출한 함수를 가리킨다

3. length 프로퍼티

  • 함수 객체의 length 프로퍼티 = 매개변수 개수

4. name 프로퍼티

함수 객체의 name 프로퍼티 = 함수 이름

  • ES6 이후 정식 표준
    ES5 익명 함수 표현식의 경우 → 빈 문자열을 값으로 갖는다
    ES6 함수 객체를 가리키는 식별자를 값으로 갖는다
  • 함수 이름과 함수 객체를 가리키는 식별자는 의미가 다르다
  • 함수를 호출 할 때는 함수 이름이 아닌 함수 객체를 가리키는 식별자를 호출한다

5. proto 접근자 프로퍼티

  • 함수 객체 고유의 프로퍼티X
  • Object,prototype 객체의 프로퍼티를 상속받음
  • [[Prototype]] 내부 슬롯이 가리키는 프로토타입 객체에 접근하기 위해 사용하는 접근자 프로퍼티
  • 내부 슬롯에는 직접 접근할 수 없고, 간접적인 접근 방법을 제공하는 경우에 한하여 접근할 수 있다
  1. prototype 프로퍼티
  • 생성자 함수로 호출 할 수 있는 함수 객체
  • constructor만이 소유하는 프로퍼티
  • 일반 객체와 생성자 함수로 호출할 수 없는 non-constructor에는 prototype 프로퍼티가 없다
  • 생성자 함수가 생성할 인스턴스의 프로토타입 객체를 가리킨다

📌 개념 정리

console.dir() 함수 객체의 내부를 볼 수 있는 메서드

유사 배열 객체

  • length 프로퍼티를 가진 객체로 for 문으로 순회할 수 있는 객체
  • 배열이 아니므로 배열 메서드를 사용할 수 없다X (에러발생O)
  • 배열 메서드를 사용하려면 Function.prototype.call, Function.prototype.apply 사용하여 간접 호출해야 한다

이터러블 ES6에 도입된 이터레이션 프로토콜을 준수하면서 순회 가능한 자료구조

hasOwnProperty 메서드 인수로 전달받은 프로퍼티 키가 객체 고유의 프로퍼티 키인 경우에만 true를 반환하고 상속받은 프로토타입의 프로퍼티 키인 경우 false를 반환

profile
뜨거운 열정으로 꿈을 실현하는 프론트엔드 개발자 장문정

0개의 댓글