[CORE - JAVASCRIPT] 4. Closure

기록하며 공부하자·2022년 6월 23일
0
post-thumbnail

클로저(Closure)란?

클로저의 개념 및 정의를 살펴보면

클로저란 내부함수와, LexicalEnvironment의 조합 이고,
함수가 생성될때 매번 같이 발생한다.

클로저는 일반적으로 함수의 생성과 함께 무조건 생기는 당연한 개념이지만 클로저라는 단어는
클로저 환경에서만 발생하는 특별한 현상을 표현하기 위해 클로저라는 개념을 사용한다.

특별한 현상이란?

특별한 현상(컨텍스트 A에서 선언한 변수를 내부함수 B에서 참조할 경우에 발생하는 현상)

var outer = function(){
    var a = 1;
    var inner = function (){
        return ++a
    }
    return inner()
}

var outer2 = outer()
console.log(outer2())
console.log(outer2())

위처럼 실행한다면

outer에서 선언한 변수 a를 참조하는 inner를 outer 외부에서 실행하였더니 outer가 종료된 이후에도 a가 계속 살아 있게 된다.

이것이 특별한 현상이며 클로저의 핵심 개념이다.

추가 예제

function user(_name) {
  var _logged = true;

  return {
    get name() {
      return _name;
    },
    set name(v) {
      _name = v;
    },
    login() {
      _logged = true;
    },
    logout() {
      _logged = false;
    },
    get status() {
      return _logged ? "login" : "logout";
    },
  };
}

var jay = user("무무");

console.log(jay.name); // 무무 (함수가 죽어도 변수는 살아있는것)

jay.name = "모모";

console.log(jay.name); // 모모

console.log(jay.status); // login

jay.logout();
console.log(jay.status); // logout

jay.status = true;
console.log(jay.status); // login

아직 클로저를 이용해 다양한 상황을 만들어 보지 않아서 감이 확실이 안오는 측면이 있는 부분은 차차 학습해봐야 할거 같다.

profile
프론트엔드 개발자 입니다.

0개의 댓글

관련 채용 정보