갈푸라떼
갈푸라떼는 개발중
갈푸라떼
전체 방문자
오늘
어제
  • 분류 전체보기 (232)
    • CS (0)
      • CSinfo (0)
    • Frontend (15)
      • HTML,CSS (1)
      • Javascript (2)
      • React (0)
      • React Hook (12)
    • Backend (0)
      • Python (0)
      • Node.js (0)
      • php (0)
    • DB (2)
      • MySQL (2)
      • BigQuery (0)
      • Mongodb (0)
    • Study (186)
      • JavaScript (72)
      • JavaScript(Clean code) (50)
      • Node.js (11)
      • HTML,CSS (13)
      • React (30)
      • TypeScript (10)
      • React-Native (0)
    • Error (2)
      • error (2)
    • Git (22)
      • Git (22)
    • Help Coding (4)
      • Useful websites (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • Github

공지사항

인기 글

태그

  • 이터러블
  • class
  • 실행 컨텍스트
  • 렉시컬 환경
  • 객체타입
  • PM2
  • 스코프 체인
  • function
  • 네이밍
  • 싱글스레드
  • 오버라이딩
  • 컴파일러
  • 함수
  • 심볼
  • ECMAScript
  • 정적 레벨
  • prototype
  • 자바스크립트엔진
  • nodemon
  • this
  • SPREAD
  • 호이스팅
  • 프로토타입
  • Arrow
  • structure
  • symbol
  • 인터프리터
  • 원시타입
  • 상속
  • Babel

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
갈푸라떼

갈푸라떼는 개발중

Study/JavaScript(Clean code)

[JavaScript][clean-code] 클로저 (Closure)

2022. 6. 15. 16:49

* Closure (클로저)

[참고 내용]

https://latte1114.tistory.com/298

https://latte1114.tistory.com/365

* 클로저 예시 코드

function add(num1) {
  return function sum(num2) {
    return num1 + num2;
  };
}

const addOne = add(1);
console.log(addOne(3)) // 4

// 1을 넘긴상태로 scope가 기억되기 때문에 4가 호출된다.
  • 클로저를 사용한 함수를 보면 괄호가 2개이다.
  • 괄호가 모두 호출되면 완벽히 함수가 다 호출되고 종료된다.
  • 그말은 즉, 괄호를 한번 실행했기 때문에 add라는 함수는 외부함수만 실행이 된거고 실행된 상태에서 내부의 함수의 환경을 기억하고 있다.
  • bind메서드와 비슷한 역할을 한다.
  • 똑같은 함수로 실행시킬때마다 개별 환경을 기억할 수 있다.

* closure응용 예시

function add(num1) {
  return function(num2) {
    return function(calculateFn) {
      return calculateFn(num1, num2);
    };
  };
}

function sum(num1, num2) {
  return num1 + num2;
}

const addOne = add(1)(2);
const sumAdd = addOne(sum);

* closure응용 예시

const arr =[1, 2, 3, 'A', 'B', 'C'];

function isTypeOf(type) {
  return function(value) {
    return typeof value === type;
  };
}

const isNumber = isTypeOf('number');
const isString = isTypeOf('string');

arr.filter(isNumber); // [1, 2, 3]
arr.filter(isString); // [ 'A', 'B', 'C' ]

* closure응용 예시 (fetch)

function fetcher(endpoint) {
  return function(url, options) {
    return fetch(endpoint + url, options)
      .then((res) => {
        if (res.ok) {
          return res.json();
        } else {
          throw new Error(res.error);
        }
      })
        .catch((err) => console.error(err));
  };
}

const naverApi = fetcher('https://naver.com');
const daumApi = fetcher('https://daum.net');

* closure 예시

  • Throttling : 마지막 함수가 호출된 후 일정 시간이 지나기 전에 다시 호출되지 않도록 하는 것
  • Debouncing : 연이어 호출되는 함수들 중 마지막 함수(또는 제일 처음)만 호출하도록 하는 것
someElement.addEventListener('click', debounce(handleClick, 500));
someElement.addEventListener('click', throttle(handleClick, 500));

[참고] https://www.zerocho.com/category/JavaScript/post/59a8e9cb15ac0000182794fa

'Study > JavaScript(Clean code)' 카테고리의 다른 글

[JavaScript][clean-code] 순수 함수(pure function)  (2) 2022.06.15
[JavaScript][clean-code] Callback Function  (0) 2022.06.15
[JavaScript][clean-code] 화살표 함수 (Arrow function)  (0) 2022.06.13
[JavaScript][clean-code] void & return  (0) 2022.06.13
[JavaScript][clean-code] Rest Parameters  (0) 2022.06.13
    'Study/JavaScript(Clean code)' 카테고리의 다른 글
    • [JavaScript][clean-code] 순수 함수(pure function)
    • [JavaScript][clean-code] Callback Function
    • [JavaScript][clean-code] 화살표 함수 (Arrow function)
    • [JavaScript][clean-code] void & return
    갈푸라떼
    갈푸라떼

    티스토리툴바