2017 - 10 - 21 (토)
인사이드 자바스크립트(송형주, 고현준 지음 한빛 미디어) 참조
클로져
- 클로져 1단계
var cnt = 0;  // 전역변수라서 변수이름 충돌가능성. 외부에서 접근가능. 값보호 필요
function increseCnt() {
  cnt++;
}
increseCnt();
increseCnt();
increseCnt();
console.log(cnt); // 3 출력
- 클로져 2단계
function increseCnt() {
  var cnt = 0;  // 지역변수. 범위(스코프)는 좁아졌으나 매번 0으로 초기화됨
  cnt++;
  console.log(cnt);
}
increseCnt(); // 1출력
increseCnt(); // 1출력
increseCnt(); // 1출력
// console.log(cnt);
- 클로져 3단계
//변수를 지역변수로 하고, 함수를 내부함수로 변경 - 내부함수라서 외부에서 호출할 수 없다는 문제발생
function closure() {
  var cnt = 0;
  function increaseCnt() {
    cnt++;
    console.log(cnt);
  }
  increaseCnt();
  increaseCnt();
  increaseCnt();  
}
closure(); // 1 2 3 출력
// increase();  // 에러
- 클로져 4단계
//내부함수를 반환하여, 외부에서 사용할 수 있도록 변경.
function closure() {
  var cnt = 0;
 return function increaseCnt() {
    cnt++;
    console.log(cnt);
  };  
}
var increaseCnt = closure();
increaseCnt(); // 1출력
increaseCnt(); // 2출력
increaseCnt(); // 3출력