일급 객체로서의 함수

..·2023년 4월 5일
0
post-thumbnail
  • 자바스크립트에서 함수는 일급 객체(First-Class Object)다.
  • 일급 객체(First-class Object) : 다른 객체들에 일반적으로 적용 가능한 연산을 모두 지원하는 객체

1. 일급 객체로서의 함수 (1)

  • 변수에 함수를 할당할 수 있다.

    • 함수가 마치 값으로 취급된다.
    • 함수가 나중에 사용될 수 있도록 조치가 되었다.
    
    // const sayHello = function() {
    //console.log("Hello!")
    //};
  • 함수를 인자로 다른 함수에 전달할 수가 있다.

    • 콜백함수 : 매개변수로써 쓰이는 함수

    • 고차함수 : 함수를 인자로 받거나 return하는 함수

      
      function callFunction(func) {
        //매개변수로 받은 변수가 사실, 함수다.
        func();
      }
      
      const sayHello = function (){
      console.log("Hello!")
      };
      
      callFunction(function () {
        console.log("Hello!");
      });
    • 함수를 반환할 수 있다.
    function createAdder(num) {
      return function (x) {
        return x + num;
      };
    }
    const addFive = createAdder(5);
    console.log(addFive(10)); //15

2. 일급 객체로서의 함수 (2)

const person = {
  name: "John",
  age: 31,
  isMarried: true,
  sayHello: function () {
    console.log(`Hello, My name is ${this.name}`);
    //this 는 항상 자기 자신을 가리킨다.
    //여기서 말하는 this는 person
  },
};
person.sayHello();//Hello, My name is John
  • 화살표 함수로 바꿔보기
    const person = {
      name: "John",
      age: 31,
      isMarried: true,
    
       sayHello:()=> {
      console.log(`Hello, My name is ${this.name}`);
    
        //this 는 항상 자기 자신을 가리킨다.
        //여기서 말하는 this는 person
      },
    };
    person.sayHello();//Hello, My name is undefined
    //화살표함수는 this를 바인딩하지 않는다.
  • 배열의 요소로 할당

const myArr = [
  function (a, b) {
    return a + b;
  }, //0번째 요소
  function (a, b) {
    return a - b;
  }, // 1번째 요소
];

// 더하기
console.log(myArr[0](1, 3)); //4

// 빼기
console.log(myArr[1](10, 7)); //3
function multiplyBy(num) {
  return function (x) {
    return x * num;
  };
}

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

const multiplyByTwo = multiplyBy(2);
const multiplyByThree = multiplyBy(3);

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

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

0개의 댓글