CLOSURE

이남수·2020년 2월 6일
0

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

function setCounter() { 
  var count2 = 0;
  return function() {
    return ++count2;
  }  
}

var count1 = setCounter();
count1();
  1. 전역 실행컨텍스트 생성
  2. 함수 setCounter과 변수 count1 선언 (호이스팅)
  3. setCounter 실행 (이때 setCounter의 실행컨택스트 생성)
  4. setCounter의 스코프 안에서 변수 count2와 익명함수가 선언
  5. 익명함수가 리턴되어 count1 변수에 할당
  6. count1에서 할당된 익명함수가 실행되고 변수 count2를 탐색
  7. count2가 익명함수 스코프안에 없으니 상위함수인 setCounter함수에서 count2를 찾아 결과값 1를 리턴

클로져란 생명주기가 끝난 함수의 변수를 사용하는 함수

클로져의 특성을 이용하여 javascript에서도 private한 변수를 만들 수 있다.

var car = {
  fuel: 10,
  power: 2,
  total: 0,
  run: function(a){
    this.fuel -= 1;
  }
};
car.fuel = 10000;	//이러한 방법으로 연료를 마음대로 늘릴수 있음

이러한 상황을 막기위해

var createCar = function(f, p){
  var fuel = f;
  var power = p;
  var total = 0;
  return {
    run: function(a){
      this.fuel -= 1;
    }
  }
}
var car = createCar(10,2); //이렇게 되면 처음에 선언한 연료를 마음대로 늘릴수 있는 방법이 사라짐

이와 같은 방법으로 함수내부에 있는 변수들은 private한 변수로 return된 변수는 public한 변수로 사용할 수 있다.

profile
큘슈호윤

0개의 댓글