일급 객체(First Class Object)

Jayden ·2023년 3월 10일
0

1. 일급객체란 ?

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

  1. 무명의 리터럴로 생성할 수 있다. 즉, 런타임에 생성이 가능하다.
  2. 함수는 변수에 저장할 수 있다.
  3. 함수의 매개변수에 전달 할 수 있다.
  4. 함수의 반환값으로 사용될 수 있다.
const increase = function(num){
	return ++num;
};

const decrease = function (num){
 	return --num;
};

// 함수는 객체에 저장할 수 있다.
const auxs = {increase, decrease}


//3. 함수의 매개변수에 전달할 수 있다.
//4. 함수의 반환값으로 사용할 수 있다.

function makeCounter(aux){
	let num = 0;
 	
 return funtion () {
  	num = aux(num) 
   return num;
 }
}


//3.  함수의 매개변수에게 함수를 전단할 수 있다.

const increaser = makeCounter(auxs.increase);
console.log(increaser());
console.log(increaser());

const decreaser = makeCounter(auxs.decrease);
console.log(decreaser());
console.log(decreaser());

2. 함수 표현식

자바스크립트의 함수는 객체 타입의 입니다. 자바스크립트의 함수는 값처럼 변수에 할당할 수 있고, 프로퍼티 값이 될 수도 있으며, 함수가 일급 객체라는 것은 함수를 값처럼 자유롭게 사용할 수 있다는 의미입니다.

따라서, 함수 리터럴로 생성한 함수 객체를 변수에 할당할 수 있습니다. 이러한 함수 정의 방식을 함수 표현식이라고 합니다.

var add = function (x, y) {
	return x + y;
};

console.log(add(2,5));

함수 리터럴의 함수 이름 생략할 수 있습니다. 이러한 함수를 익명 함수라고 합니다.
함수 표현식의 함수 리터럴은 함수 이름을 생략하는 것이 일반적입니다.

var add = function foo(x, y){
 	return x + y ; 
};

console.log(add(2,5))

// 함수 객체를 가리키는 식별자로 호출

console.log(foo(2,5));

//함수 이름으로 호출하면 Reference Error가 발생.
//함수 이름은 함수 몸체 내부에서만 유효한 식별자.

console.log(foo(2,5));

//ReferenceError : foo is not defined





profile
프론트엔드 개발자

0개의 댓글