javascript closure

simuruk wiki

클로저

  • 함수와 함수가 선언된 환경의 조합
  • 일급 객체함수의 개념을 이용해서 유효 범위를 묶는 바인딩
  • 클로저가 만들어질때 정의됨
  • getter, setter, private 함수 흉내낼수 있음
var createPet = function(name){
    var s;
    return {
        setName: function(newName) {
            name = newName;
        },
        getName: function() {
            return name;
        },
        setS: function(newS) {
            s = newS;
        }
    }
}

// 스코프 밖의 변수에 접근이 제대로 안오게됨
for (var i = 0; i < arr.length; i++) {
    setTimeout(function() {
      console.log('The index of this number is: ' + i);
    }, 3000);
  }
// 클로저 사용 반복문 즉시호출 함수 형식으로 함수 인자로 한번더 감싸서 전달
setTimeout(function(i_local) {
      return function() {
        console.log('The index of this number is: ' + i_local);
      }
    }(i), 3000);
});
for (var i = 0; i < 5; i++) {
    (function(i) {
        setTimeout(function() {
            console.log(i);
        }, 1000);
    })(i); }
//  let 사용, let 은 함수가 호출 될 때 마다 인덱스 i 값이 바인딩
for (let i = 0; i < arr.length; i++) { // let 블록 변수 변화되는값, const 상수값
    setTimeout(function() {
      console.log('The index of this number is: ' + i);
    }, 3000);
  }