본문 바로가기

Web/Javascript

클로저(CLOSURE)

Lexical environment


선언 당시의 환경에 대한 정보를 담는 객체(구성 환경)

'이 함수는 이러이러한 것들로 구성되어 있다' 같은 정보




클로저(CLOSURE)


함수 내부에서 생성한 데이터와 그 유효범위로 인해 발생하는 특수한 현상 / 상태

외부에 정보를 제공할 수 있는 유일한 수단은 Return


함수내부에서 다시 함수를 return 한다고 해도 최초 선언시에 생성된 스코프와 환경정보는 변하지 않고

최초 선언시의 정보를 유지한다.


스코프(유효범위)정의될 때 결정된다. 그렇기 때문에 정의됐을 때 당시에 들고있던 정보를 그대로 유지할 수 있는 것이다.




클로저의 이점


접근 권한 제어

지역변수 보호

데이터 보존 및 활용


function a() {
  var x = 1;
  return function b() {
    console.log(x);
  }
}
var c = a();
c();
function setCounter() {
  var count = 0;
  return function() {
    return ++count;
  }
}
var count = setCounter();
count();



private member 생성 방법

1. 함수에서 지역변수 및 내부함수 등을 생성한다.

2. 외부에 노출시키고자 하는 멤버들로 구성된 객체를 return 한다.

-> return한 객체에 포함되지 않은 멤버들은 private하다.

-> return한 객체에 포함된 멤버들은 public하다.


var createCar = function(f, p) {
  var fuel = f;
  var power = p;
  var total = 0;

  return {
    run: function(km) {
      var wasteFuel = km / power;
      if(fuel < wasteFuel) {
        console.log('이동 불가');
        return;
      }
      fuel -= wasteFuel;
      total += km;
    }  
  }
};
var car = createCar(10, 2);


'Web > Javascript' 카테고리의 다른 글

CLASS  (0) 2018.01.15
PROTOTYPE  (0) 2018.01.15
CALL, APPLY, BIND 메소드  (0) 2018.01.11
THIS  (0) 2018.01.11
함수  (0) 2018.01.11