해당 포스팅은 위키북스의 모던 자바스크립트 Deep Dive라는 책을 독학하며 기록하는 글입니다.


일급객체

다음과 같은 조건을 만족하는 객체를 일급 객체라 한다.

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

JS의 함수는 위의 4가지 조건을 모두 만족하므로 일급객체라고 할 수 있다.

함수가 일급 객체라는 것은 함수를 객체와 동일하게 사용할 수 있다는 의미이고, 객체는 값이므로 함수는 값과 동일하게 취급할 수 있다는 것이다.

일급 객체로서 함수가 가지는 가장 큰 특징은 일반 객체와 같이 함수의 매개변수로 전달할 수 있으며, 함수의 반환값으로 사용할 수도 있다는 것이다.

하지만 일반적인 객체와의 차이점도 있는데 바로 함수는 호출이 가능하지만 일반적인 객체는 호출이 불가능하다는 것이다. 또한 일반적인 객체와 다르게 함수만이 가지는 고유한 프로퍼티들도 있다.

함수 객체의 프로퍼티

함수 객체만이 가지는 고유한 프로퍼티는 arguments, caller, length, name, prototype이 있다. 각각 무엇을 의미하는지 살펴보자.

  1. arguments
    -> arguments의 프로퍼티 값은 arguments객체이다. 해당 객체는 함수 호출 시 전달된 인수들의 정보를 담고 있는 유사 배열 객체이다.
    -> 선언된 매개변수의 개수와 함수를 호출할 떄 전달하는 인수의 개수를 확인하지 않는 JS의 특성 때문에 함수가 호출되면 인수 개수를 확인하고 이에 따라 함수의 동작을 달리 정의할 필요가 있을 수 있다. 이때 유용ㅇ하게 사용되는 것이 arguments객체이다.
    -> arguments객체의 length프로퍼티는 전달된 인수의 개수를가리킨다.

  2. caller
    -> 함수 자신을 호출한 함수를 가리킨다.
    -> 호출한 함수가 없을 시에는 nul값을 가진다.
    -> 이후 표준화될 예정도 없는 프로퍼티이므로 자세히 알 필요는 없다.

  3. length
    -> 함수를 정의할 때 선언한 매개변수의 개수를 가리킨다.

  4. name
    -> 함수의 이름을 나타낸다.
    -> ES6이전에는 비표준이었다가 표준이 되었는데 따라서 ES5와 ES6에서 동작하는 방식이 조금 다르다.
    -> 함수의 이름이 있을 경우, ES5와 ES6모두 함수의 이름을 반환하지만, 익명 함수의 경우 ES5는 빈 문자열을, ES6는 익명 함수가 할당된 식별자 문자열을 반환한다.

  5. prototype
    -> 생성자 함수로 호출할 수 있는 함수 객체, 즉 constructor만이 소유하는 프로퍼티이다.
    -> 따라서 모든 함수 객체가 가지고 있는 프로퍼티가 아니다.

profile
I Will be Relaxed Person

0개의 댓글