하루 30분 모던 자바스크립트 딥 다이브. 함수와 일급 객체

일급 객체

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

함수 객체의 프로퍼티

  1. arguments 프로퍼티
    1. arguments 프로퍼티의 값은 arguments 객체이다.
    2. 함수 호출 시 전달된 인수를 저장하는 순회 가능한 유사 배열 객체이다.
    3. 지역 변수처럼 사용된다.
    4. 매개변수의 개수보다 인수를 더 많이 전달한 경우 초과된 인수는 무시된다. 하지만 암묵적으로 arguments 객체의 프로퍼티로 보관된다.
    5. 매개변수 개수를 확정할 수 없는 가변 인자 함수를 구현할 때 유용하다.
    6. 유사 배열 객체는 배열이 아니므로 배열 메서드를 사용할 경우 에러 발생. 따라서 배열 메서드를 사용하려면 Function.prototype.call / apply 를 사용하여야 한다. (ES6에서 Rest 파라미터 도입으로 사용하기 편해짐)
    function sum(...args){
    	return args.reduece((pre,cur) => pre+cur,0)
    }
    
  2. Caller 프로퍼티
    1. ECMAScript 사양에 포함되지 않은 비표준 프로퍼티로 별로 중요하지 않음
    2. 함수 자신을 호출한 함수를 가리킨다.
  3. length 프로퍼티
    1. 함수를 정의할 때 선언한 매개변수의 개수를 가르킨다.
    2. arguments 객체의 length와는 프로퍼티 값이 다를 수 있다.
  4. name 프로퍼티
    1. 함수 이름을 나타내는 프로퍼티
    2. ES6부터 표준이 되었다.
    3. 함수를 호출할 때는 함수 이름이 아닌 함수 객체를 가리키는 식별자로 호출한다.
  5. proto 접근자 프로퍼티
    1. 모든 객체는 [[Prototype]]이라는 내부 슬롯을 가진다. 상속을 구현하는 프로토타입 객체를 가리킨다.
    2. 프로토타입 객체에 접근하기 위한 접근자 프로퍼티이다.
  6. prototype 프로퍼티
    1. 생성자 함수로 호출할 수 있는 함수 객체, 즉 constructor만이 소유하고 있는 객체
    2. 일반 객체와 non-constructor에는 없다.