[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
댓글남기기