본문 바로가기

programming/javascript

[JS] closure 클로저 예제 코드

클로저란, 외부함수 안에 내부함수가 리턴되었어도 여전히 외부함수의 변수가 살아있는(?) 현상을 말하는 것으로 알고 있다.

 

스코프 확인, 리턴되어도 외부함수를 사용할 수 있다. 

function outerFn() {
  let a = 10;
  return function innerFn() {
    let b = 20;
    return function deepFn() {
      let sum = a + b + g;
      console.log(sum);
    };
  };
}
let g = 30;

outerFn()()(); // 60

 

 

클로저 기능 중 대표적인 것이 커링이다.

커링 : 함수 하나가 n개의 인자를 받는 대신, n개의 함수를 만들어 각각 인자를 받게하는 방식.

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

let tenAdd = add(10);

console.log(tenAdd(5)); // 15
console.log(tenAdd(30)); // 40

 

변수를 함수밖으로 노출시키지 않게 할 때도 사용된다.

function makeCounter() {
  let privateNum = 0;

  return {
    add: function() {
      privateNum++;
    },
    minus: function() {
      privateNum--;
    },
    getPrivateNum: function() {
      return privateNum;
    }
  };
}