240723 일급 객체로서의 함수

신한별·2024년 7월 23일

💪 매일 기록

목록 보기
27/97

일급 객체(First-Class Object)

  • 다른 객체들이 일반적으로 적용 가능한 연산을 모두 지원하는 객체.

자바스크립트에서 함수는 일급 객체이며, 여러가지 방식으로 유연하게 다룰 수 있다.
일반 객체와 달리 함수는 특별한 능력이 있는데 . . .❔

(1) 변수에 함수를 할당

  const sayHello = function(){
    console.log('Hello');
  }
 //sayHello 를 가지고 함수를 어디서나 호출할 수 있다.
 //함수를 객체/변수처럼 매개변수로 보낼 수 있다.

(2) 함수를 인자로 다른 함수에 전달


// (2)-1. 콜백함수 : 매개변수로 쓰이는 함수
// (2)-2. 고차함수 : 함수를 인자로 받거나 return하는 함수 

function callFunction(func){
  // 콜백함수이자 고차함수 
  func();
}

const sayHi = function (){
  console.log('hi!');
}

callFunction(sayHi); // hi! 출력 

(3) 함수를 반환


function createAdder (num) {
  return function (x) {
    return x + num;
  };
}

const addFive = createAdder(5); 
console.log(addFive(10)); // 15 출력 

(4) 객체의 프로퍼티로 함수를 할당

const person = {
  name: "Sam",
  age: 31,
  isMarried: true,
  sayHihi: function () {
    console.log(`Hihi, My name is ${this.name}.`)
  },
  sayBye: () => {
    console.log(`Bye, ${this.name}.`);  // 💥
  }

}
person.sayHihi(); // Hihi, My name is Sam. 
person.sayBye(); // Bye, undefined. 💥 화살표 함수는 'this'를 바인딩 하지 않는다!!

(5) 배열의 요소로 함수를 할당


const myArr = [
  function (a,b) {
    return a+b
  }, function (a,b) {
    return a-b
  }
];

console.log(myArr[0](1,3)); // 4
console.log(myArr[1](20,5)); // 15

실습

function multiplyBy(num) {
  return function (x) {
    return x * num;
  }
};

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

const multiplyByTwo = multiplyBy(2);
// function (x) {  return x * 2  } ;
const multiplyByThree = multiplyBy(3);
// function (x) {  return x * 3  } ;

console.log(multiplyByTwo(10)); // 20
console.log(multiplyByThree(10)); // 30

const result = add(multiplyByTwo(5), multiplyByThree(10)); // add(10,30)
console.log(`FINAL => ${result}`); // FINAL => 40

좀만 더 하면 알 것 같은데 ........................
뇌가 간지러운 이 기분 😶

0개의 댓글