TIL/FE 지식

3. 클로저의 원리와 사용하는 이유

반응형

클로저가 너무 어렵따.......


  • 포인터의 개념을 주소라는 개념으로 받아들이기 시작하면 아주 쉽게 이해하듯이 closure 또한 scope chain에서 하나의 scope를 생성해준다는 개념으로 이해한다면 아주 쉽게 이해가 가능할 것이다. 
  • 클로저를 이용해 구현하게 되면 컨텍스트에 접근할 때 스코프를 이용해 접근하기 때문에 this라는 키워드를 쓸 필요도 없다. 이렇게 만들어진 카운터는 어느 객체에 붙여서 사용해도 동일한 컨텍스트의 결과를 내주고 이벤트 리스너로 사용해도 동일한 컨텍스트를 유지한 상태로 사용할 수 있다.
   var counter = (function() {
        var _count = 0;

        return function() {
            return _count += 1;
        };
    })();

    console.log(counter());
    console.log(counter());
    
   ////////////////////////////////////
    
   function counterFactory() {
        var _count = 0;

        return function() {
            _count += 1;

          return _count;
       };
    }

    var counter = counterFactory();
    var counter2 = counterFactory();

    console.log(counter()); //1
    console.log(counter()); //2
    console.log(counter2()); //1
    
    ////////////////////////////////////
    
    var counter = counterFactory();

    var app = {
        counter: counter
    };

    var app2 = {
        counter: counter
    };

    console.log(app.counter()); //1
    console.log(app.counter()); //2
    console.log(app2.counter()); //3
  • 은닉화의 측면에서 본다면 오히려 객체보다는 클로저의 활용에서 더 극대화된다. _count라는 변수는 외부에서 접근할 방법이 전혀 없기 때문이다. 자바스크립트의 모든 객체는 프로퍼티들의 외부 접근이 모두 허용된다. 클로저 외에는 차단할 방법이 전혀 없다.

 

클로저 - JavaScript | MDN

클로저는 함수와 함수가 선언된 어휘적 환경의 조합이다. 클로저를 이해하려면 자바스크립트가 어떻게 변수의 유효범위를 지정하는지(Lexical scoping)를 먼저 이해해야 한다.

developer.mozilla.org

 

JavaScript 클로저(Closure)

클로저란?MDN에서는 클로저를 다음과 같이 정의하고 있다. 클로저는 독립적인 (자유) 변수를 가리키는 함수이다. 또는, 클로저 안에 정의된 함수는 만들어진 환경을 ‘기억한다’. 흔히 함수 내

hyunseob.github.io

 

[속깊은 자바스크립트 강좌] Closure 쉽게 이해하기/실용 예제 소스

* Closure는 자바스크립트에서 수 많은 응용들을 할 수 있는 정말로 중요한 개념이나 자바스크립트라는 언어를 더욱더 빛내줄 수 있는 특징이다. Closure를 모르고 자바스크립트를 개발하는 것은 10

unikys.tistory.com

 

클로저, 그리고 캡슐화와 은닉화 : NHN Cloud Meetup

클로저, 그리고 캡슐화와 은닉화

meetup.nhncloud.com

 

728x90
반응형

'TIL > FE 지식' 카테고리의 다른 글

8. 브라우저 저장소의 차이점 (LocalStorage, SessionStorage, Cookie)  (0) 2023.03.05
33. Virtual DOM  (0) 2023.02.05
Front-end 지식 목록  (0) 2023.01.31