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);