[ js ] 함수와 일급 객체

꼬꼬마·2022년 1월 14일

그룹스터디 🦆 팀 러버덕과 함께!

<목차>
1.일급 객체란?
2.함수의 프로퍼티
3.정리

1.일급 객체란?

일급 객체(First Class Object)는 변수가 사용될 수 있는 곳에 객체가 사용할 수 있는 것을 말한다.즉, 함수를 변수처럼 취급한다.

1️⃣ 함수를 무명의 리터럴로 생성가능

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

2️⃣ 함수를 변수나 자료구조등에 저장할 수 있다.

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

mdn: 함수가 이름을 가지고 있더라도 할당한 변수 이름을 사용해 함수를 호출할 수 있습니다. 이름을 지정하면 코드를 디버깅할 때 유용합니다. 하지만 호출하는 방식에는 영향을 미치지 않습니다.

3️⃣ 함수를 함수의 매개변수로 전달 할 수 있다.

function calculate(getFn){
   let num=0;
   const result= getFn(num);
   console.log(result); // 1
}
calculate(increase);

다른 함수에 인자로 전달된 함수를 콜백 함수 (en-US)라고 합니다. increase는 콜백 함수입니다.

4️⃣ 함수를 반환할 수 있다.

function calculate(){
   let num=0;
   return function(){
     console.log(num);
   }
}
calculate(); //  ƒ (){console.log(num);}
calculate()(); //0 
     or
const result= calculate(); // 0

함수를 반환하는 함수를 고차 함수라고 부릅니다.
만약에 calculate 함수를 직접 호출하면, 반환된 함수를 호출하지않고 함수 자체를 반환합니다. 그러므로 반환된 함수를 다른 변수에 저장하여 사용해야합니다.

2. 함수의 프로퍼티

객체가 프로퍼티를 가지듯 함수도 프로퍼티를 갖는다.

function calculate(){
   let num =0;
}
console.dir(calculate);


함수 객체를 살펴보면, arguments,caller,length,name,prototype등 프로퍼티를 가지는 것을 볼 수 있다.

2-1. Arguments 프로퍼티

arguments프로퍼티값은 argumets객체이다.
arguments객체는 인수갯수에 상관없이 모든 인수를 참조할 수 있는 Array형태의 객체이다.

function test(){
    console.log(arguments);
}
test(1,2,3,4,5); //
[Arguments] { '0': 1, '1': 2, '2': 3, '3': 4, '4': 5 }

또한 실제배열이아닌 유사배열객체이므로 인덱스 0부터 가지고있고 length는 사용할수있지만 map,forEach같은 내장메서드는 가지고있지않다.

function test(){
    console.log(arguments[0],arguments[3],arguments.length);
}
test(1,2,3,4,5); //  1,4 ,5 

mdn: arguments 객체를 사용하면 함수 내에서 모든 인수를 참조할 수 있으며, 호출할 때 제공한 인수 각각에 대한 항목을 갖고 있습니다. 항목의 인덱스는 0부터 시작합니다.

2-2.length

함수의 매개변수 길이를 말한다.

function calculate(num1,num2,num3){
   let num =0;
}
console.dir(calculate);

3. 정리

js에서 함수는 변수처럼 사용되므로 일급객체이며 일급함수이자 고차함수다.
함수를 변수에 할당할수있고 함수를 반환할수있으며 함수를 인수로 전달할 수 있다.

profile
동글한지구🌍

0개의 댓글