[JavaScript] 클로저
closure
let outer = function() {
    let a = 1;
    
    let inner = function() {
        let b = 5;
        let c = 6;
        
        a = a + b + c;
        console.log(a);
    }
    
    return inner;
}
let newInner = outer();
newInner();	// 12
만약 내부 함수가 외부 함수보다 오래 살아있는 경우에, 외부 함수에 있던 변수들은 어떻게 될까요? 외부 함수의 변수들은 더 이상 사용할 수가 없을까요? X 가비지 컬렉터가 정리해 버릴까요? X
inner는 outer가 이미 반환된 후에도 outer의 a에 대한 접근 권한을 가집니다. 바로 함수는 자신을 포함하는 함수의 스코프에 접근할 수 있기 때문입니다.
클로저를 한마디로 표현한다면
폐쇄된 공간에 대한 접근 권한을 가진 함수
를 말합니다. 이러한 특징을 이용한다면 비공개 데이터를 가진 객체를 만들어 볼 수 있습니다.
정보 은닉
let person = (function() {
    let age = 15;
    
    return {
        name: "Heesung",
        
        getAge: function() {
            console.log(age);
            return age;
        },
        
        setAge: function(val) {
            age = val;
            console.log(age);
        }
    }
})();
person.getAge();	// 15
person.setAge(20);	// 20
person.age = 30;
person.getAge();	// 20
댓글남기기