코어자바스크립트 5장 part2 ( 클로저 : 정보은닉 )

클로저가 발생하는 경우

  1. return에 의해서
  2. setInterval/setTimeout
  3. eventListener

클로저의 메모리 해제 방법

함수 참조를 끊음

식별자 = null 형태로 한다.


클로저의 활용 사례

  1. 콜백함수 내부에서 외부 데이터를 사용하고자 할때
  2. 접근 권한 제어(정보 은닉)

생성자 함수를 통해 객체 만들기

function Create(name,age) {
    this._name = name;
    this._age = age;
    console.log(this)		//Create {_name: "민수", _age: 20}
}

var obj = new Create('민수',20);
console.log(obj._name);		//민수

생성자 함수를 통해 obj라는 객체를 생성한 것을 알 수 있다.

obj._age = 100;
console.log(obj._age);		//100

위의 코드를 추가한다면 age는 바뀌게 된다.


클로저 : 접근 권한 제어1 (함수 예시)

함수(){
 접근 불가능한 식별자
return 함수(){
...
}
}

var 식별자  = 함수();

위와 같은 형태로 작성된다.

function create(name) {
    var _name = name;
    return function() {
        console.log(_name);
    }
}

var hello = create('민수');
hello();	//민수

여기서는 외부에서 _name에 접근할 방법이 전혀 없다. 이렇게 클로저를 활용하여 은닉화를 해결할 수 있다.


클로저 : 접근 권한 제어2 (객체 예시)

Object.freeze 사용하기

const obj = {
  prop: 42
};

Object.freeze(obj);

obj.prop = 33;
// Throws an error in strict mode

console.log(obj.prop);
// expected output: 42

이렇게 객체의 값을 변화시키는 것을 막을 수 있다.


출처

MDN
접근권한제어
코어자바스크립트

좋은 웹페이지 즐겨찾기