최대 1 분 소요

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

댓글남기기