1. 일급 객체 ( First Class Obejct )
대부분의 스크립트 언어에서 객체는 일급 객체이며, 함수도 객체입니다.
일급 객체란 다음의 조건을 만족하는 객체를 의미합니다. ( 참고 )
- 변수나 데이터 구조안에 담을 수 있다.
- 파라미터로 전달 할 수 있다.
- 반환 값(return value)으로 사용할 수 있다.
- 할당에 사용된 이름과 관계없이 고유한 구별이 가능하다.
- 동적으로 프로퍼티 할당이 가능하다.
2. JS로 일급객체 확인
이제 JS를 통해 함수가 일급 객체라는 것을 증명해보도록 하겠습니다.
1) 변수나 데이터 구조안에 담을 수 있다.
var foo = function(){
console.log("익명함수를 foo 변수에 담을 수 있습니다.");
}
foo();
2) 파라미터로 전달 할 수 있다.
var foo = function(){
let x = 10;
return x;
}
var goo = function(value){
console.log(value)
}
// 인자로 함수를 전달할 수 있습니다.
goo(foo());
3) 반환값(return value)으로 사용할 수 있다.
var foo = function(){
return function(){
var x = 10;
return x;
}
}
console.log(foo()) // 익명함수를 반환합니다.
console.log(foo()()) // 익명함수가 반환하는 값을 반환합니다.
4) 할당에 사용된 이름과 관계없이 고유한 구별이 가능하다.
var foo = function goo(){
console.log("goo라는 함수로 선언했지만 foo라는 변수로 고유 구별이 가능합니다.")
}
foo();
goo라는 함수로 선언을 했지만 foo라는 변수에 할당하여 foo()를 호출함으로써 goo()함수를 구별할 수 있습니다.
5) 동적으로 프로퍼티 할당이 가능하다.
function foo(){
console.log("foo()함수는 비어 있습니다.")
}
foo.property1 = "첫 번째 프로퍼티 추가";
foo.property2 = "두 번째 프로퍼티 추가";
console.log(foo.property1);
console.log(foo.property2);