일급 객체
다음과 같은 조건을 만족하는 객체를 일급 객체(First-Class Citizen)라고 한다
1. 무명의 리터럴로 생성할 수 있다. 즉 런타임에 생성이 가능하다.
2. 변수나 자료구조(객체, 배열 등)에 저장할 수 있다.
3. 함수의 매개변수에 전달할 수 있다.
4. 함수의 반환값으로 사용할 수 있다.
// 1. 함수는 무명의 리터럴로 생성할 수 있다.
// 2. 함수는 변수에 저장할 수 있다.
// 런타임(할당 단계)에 함수 리터럴이 평가되어 함수 객체가 생성되고 변수에 할당된다.
const increase = function (num) {
return ++num;
};
const decrease = function (num) {
return --num;
};
// 2. 함수는 객체에 저장할 수 있다.
const pre = { increase, decrease };
// 3. 함수의 매개변수에 전달할 수 있다.
// 4. 함수의 반환값으로 사용할 수 있다.
function makeCounter(pre) {
let num = 0;
return function () {
num = pre(num);
return num;
};
}
// 3. 함수는 매개변수에게 함수를 전달할 수 있다.
const increaser = makeCounter(pre.increase);
console.log(increaser()); //1
console.log(increaser()); //2
JavaScript의 함수는 위의 조건을 모두 만족한다. 함수가 일급 객체라는 것은 함수를 객체와 동일하게 사용할 수 있다는 의미다. 일급 객체로서 함수가 가지는 가장 큰 특징은 일반 객체와 같이 함수의 매개변수에 전달할 수 있으며, 함수의 반환값으로 사용할 수도 있다는 것이다. 이는 함수형 프로그래밍을 가능하게 하는 자바스크립트의 장점 중 하나이다.
함수도 객체
함수는 객체다. 따라서 함수도 일반적인 객체의 기능을 모두 쓸 수 있다.
name 프로퍼티 : 함수의 이름
caller 프로퍼티 : 자신을 호출한 함수
argument 프로퍼티 : 함수를 호출할 때 전달된 인자값
__proto__ 프로퍼티 : [[Prototype]] 과 같은 개념.
함수 객체의 부모 열할을 하는 프로토타입 객체 -> Function.prototype 객체
Function.prototype 객체의 부모는 Object.prototype 객체
함수는 호출이 가능한(callable) '행동 객체’라고 이해하면 쉽다. 함수를 호출 할 수 있을 뿐만 아니라 객체처럼 함수에 프로퍼티를 추가·제거하거나 참조를 통해 전달할 수도 있다.
자바스크립트는 객체 기반의 프로그래밍 언어이며 자바스크립트를 이루고 있는 거의 '모든 것'이 객체다. 원시 타입의 값을 제외한 나머지 값들(함수, 배열, 정규 표현식 등)은 모두 객체다.
참조
반응형
'JavaScript' 카테고리의 다른 글
[Javascript] 실행 컨텍스트 (Execution Context) (0) | 2021.09.13 |
---|---|
[Javascript] 자바스크립트 엔진, 자바스크립트 런타임 (0) | 2021.09.08 |
[Javascript] 프로토타입(prototype) (0) | 2021.09.03 |
[Javascript] 참조, 얕은복사, 깊은복사 (0) | 2021.08.24 |
[Javascript] 고차함수 (0) | 2021.08.23 |