클로져 하면 생각나는것
close
close 하면 생각나는것
닫다
닫다 하면 생각나는것
막아버리다
막아버리다 하면 생각나는것
접근제한
접근제한 하면 생각나는것
private
자바 클래스의 멤버에 private 속성을 먹여버리면
인스턴스에서 명시적인 접근이 제한된다.
그러나 프로토타입체인등으로 객체지향프로그래밍을 하는 자바스크립트는 private기능이 없다.
Object.DefineProperty 와 같은 메서드로 접근자 프로퍼티를 수정하여 구현가능하지만 귀찮기만하고 비교적 최근나온 메서드이므로
이전부터 자바스크립트 디벨로퍼들은 클로져 기법을 써왔다
코드를 보자
function Adun (age, name) {
this.age = age;
// 클로져 기법 (aka closure)
// 즉시실행함수 (aka iife) -> 클로져 기법의 핵심!! 믿줄 짝!!
(function () {
this.name = name;
})(name);
}
Adun.prototype.getName = function () {
return this.name;
}
var adun = new Adun(24, hong);
console.log(adun.name); // error code(3691) : this.property is closure
but
console.log(adun.getName()); // 'hong'
ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 참 쉽죠?
자세한 내용은
http://blog.naver.com/hongil221/220546760545
ㅋㅋ
저기에 어디가 클로져가 있다는거?
아아. 이것이 바로 클로저 인가효?
내부함수에서 저렇게 즉시실행을 하시면 원하시는 private 효과를 못봅니다 -_- 마지막에 getter를 통해서도 hong을 불러낼수 없구요... -_-
hong은 window의 프로퍼티가 됩니다..