NBC - JS 2주차 강의 정리 : 일급 객체로서의 함수

2024. 7. 24. 14:38·프론트엔드/React

 

 

일급 객체로서의 함수 : First-Class Object

다른 객체들에 일반적으로 적용 가능한 연산을 모두 지원하는 객체
= 다른 객체와 같다

- 함수로서의 JS에 존재하는 것이 아니라 객체로서 JS에 존재하기 때문에 중요하다.
- JS 내에서 함수는 변수에 저장이 되기도 하고, 인자로 들어 가기도 하고, return이 되기도 함.

 

 

1. 변수에 함수를 할당

함수는 값으로 취급되기 때문에 변수에 할당 가능 (나중에 사용 가능)

const sayHello = function () {
  console.log("hello");
};

 

 

2. 함수를 인자로 다른 함수에 전달 가능 (콜백, 고차 함수)

 

2-1. 콜백함수

매개변수로써 쓰이는 함수 (고차함수의 한 종류라 보면 됨)

function callFunction(func) {
  // 매개변수로 받은 변수가 사실 함수임
  func();
}

 

 

2-2. 고차함수

함수를 인자로 받거나 return 하는 함수

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

callFunction(sayHi);
// func로 sayHi가 저장된 함수가 전달됨

 

 

3. 함수를 반환할 수 있다.

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

const addFive = createAdder(5); // num에 5가 들어감
// 결국 이런 샘
// const addFive = function (x) {
// return x + 5;
// };
console.log(addFive(10)); // x에 10이 들어감 > 15 출력

 

 

4. 객체 안에서 함수가 쓰이는 방법

 

4-1. 객체의 요소로 함수를 할당

 

const person = {
  name: "jang",
  age: 30,
  isMarried: true,
  sayHello: function () {
    console.log("Hello my name is " + this.name);
    console.log(`Hello my name is ${this.name}`);
  },
  sayHi: () => {
    console.log("Hi my name is " + this.name); //
  },
};
person.sayHello(); // Hello my name is jang 출력
person.sayHi(); // Hi my name is undefined 출력 (this가 undefined) > this 바인딩 부분 > 화살표 함수 사용xxxx

 

 

4-2 배열의 요소로 함수를 할당

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](10, 7)); // 3

 

 

4-3 대입, 할당 등 예시

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

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

const multiplyByTwo = multiplyBy(2);
// 대입해보면 밑에와 같이 나옴
// const multiplyByTwo = function (x) {
// return x * 2;
// }

const multiplyByThree = multiplyBy(3);

console.log(multiplyByTwo(10), multiplyByThree(10)); // 20, 30 출력
// x에 10이 들어감

const result = add(multiplyByTwo(5), multiplyByThree(10));
console.log(`FINAL => ${result}`); // 40 (x에 5와 10이 들어감) > 5 x 2, 10 x 3의 합인 40

 

'프론트엔드 > React' 카테고리의 다른 글

NBC - JS 개인프로젝트 : api로 받아온 데이터 화면에 뿌리기 (promise.all, aysnc, await)  (0) 2024.07.26
NBC - JS 2주차 강의 정리 : Map, Set  (0) 2024.07.24
NBC - JS 2주차 강의 정리 : 구조분해할당, 전개 구문(Spread Operator)  (0) 2024.07.24
NBC - JS 1주차 강의 정리 : 반복문  (2) 2024.07.23
NBC - JS 1주차 강의 정리 : 객체, 배열  (0) 2024.07.23
'프론트엔드/React' 카테고리의 다른 글
  • NBC - JS 개인프로젝트 : api로 받아온 데이터 화면에 뿌리기 (promise.all, aysnc, await)
  • NBC - JS 2주차 강의 정리 : Map, Set
  • NBC - JS 2주차 강의 정리 : 구조분해할당, 전개 구문(Spread Operator)
  • NBC - JS 1주차 강의 정리 : 반복문
장쫑이이
장쫑이이
  • 장쫑이이
    JongHoy
    장쫑이이
  • 전체
    오늘
    어제
    • 코딩공부하기 (41)
      • 프론트엔드 (41)
        • Next.js (12)
        • React (16)
        • TypeScript (2)
        • 상태관리 (1)
        • HTML&CSS (1)
        • 기타 (9)
      • 과거 공부 내용 (0)
        • JSCODE 그룹스터디 (0)
        • JS 객체 지향 프로그래밍 (0)
        • 리엑트 (0)
        • 제로초 - 웹 게임을 만들며 배우는 리엑트 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    이중 for문
    git
    행렬의 덧셈
    isNan
    styled-components
    LastIndexOf
    팀프로젝트
    Filter
    slice
    속성 추가
    useState
    필터링
    github
    유클리드 호제법
    map
    reduce
    토글
    setAttribute
    destructuring
    While문
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
장쫑이이
NBC - JS 2주차 강의 정리 : 일급 객체로서의 함수
상단으로

티스토리툴바