JS_Deep_Dive_chapter18 : 함수와 일급 객체

조용환·2024년 3월 4일
0

JS_Deep_Dive

목록 보기
3/21

chapter 18 : 함수와 일급 객체

일급 객체

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

js의 함수는 이를 모두 만족하므로 일급 객체다.

일반 객체 vs 함수

  1. 함수는 호출가능, 일반 객체는 불가능
  2. 함수 객체는 함수 고유의 프로퍼티를 소유한다.

함수 객체의 프로퍼티

aruguments, caller, length, name, prototype을 가진다

arguments 프로퍼티

  • 프로퍼티 값은 arguments 객체, 호출 시 인수들의 정보를 담고 있는 내부 참조가 가능한 iterable 유사 배열 객체
  • ES3 이후로 폐지, arguments 객체를 참조하도록 하자.
  • 함수의 매개변수와 인수의 개수가 일치하는지 js는 확인안하므로 숫자가 달라도 에러 x
  • 인수를 적게 전달할 경우 전달 못받은 매개변수는 undefined, 초과 시에는 무시
  • 매개변수 개수를 확정할 수 없는 가변 인자 함수 구현시 유용
  • ES6에 Rest 파라미터 도입으로 사용이 줄어듬

caller 프로퍼티

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

length 프로퍼티

  • 매개변수의 개수를 가리킴

name 프로퍼티

  • 함수 이름을 나타냄
  • ES6부터 정식 표준
  • ES5와 ES6의 동작이 다름. 익명 함수 표현식의 경우 ES5는 빈 문자열, ES6는 함수 객체를 가리키는 식별자를 값으로 가짐.
es6 ex)
var anonymousFuc = function {};
console.log(anonymousFunc.name); //anonymounsFunc

proto 접근자 프로퍼티

  • [[Prototype]]이라는 내부 슬롯이 가리키는 프로토타입 객체에 접근하기 위해 사용하는 접근자 프로퍼티
  • 직접접근 불가, __proto__를 통한 간접접근만 가능

prototype 프로퍼티

  • non-constructor에는 prototype이 없음.
profile
practice react, javascript

0개의 댓글