• 티스토리 홈
  • 프로필사진
    alpha brain
  • 방명록
  • 공지사항
  • 태그
  • 블로그 관리
  • 글 작성
  • 250x250
alpha brain
  • 프로필사진
    alpha brain
    • 분류 전체보기 (92)
      • SOFTWARE DEVELOP (67)
        • REACT.JS (3)
        • WEBPACK (4)
        • HTML&CSS (2)
        • EXPRESS (0)
        • DATABASE (0)
        • NODE.JS (2)
        • JAVASCRIPT (24)
        • DOCKER (1)
        • Linux (3)
        • Git (6)
        • GRAPHQL (0)
        • Datastructure (7)
        • Development (6)
        • HTTP (1)
        • Programming Paradigm (1)
        • Algorithm log (5)
        • DEV log (1)
        • Project log (0)
        • I don't know yet (1)
      • 경제, 재무 (23)
      • 여행 (0)
      • 시사, 상식 (2)
  • 반응형
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
      등록된 댓글이 없습니다.
    • 최근 공지
        등록된 공지가 없습니다.
      # Home
      # 공지사항
      #
      # 태그
      # 검색결과
      # 방명록
      • [Javascript] 클로저(Closure)
        2020년 01월 20일
        • alpha brain
        • 작성자
        • 2020.01.20.:08
        728x90
        반응형

        클로저(Closure) : (공장,학교,병원 등의 영구적인) 폐쇄(되는 상황) - naver 사전

        자바스크립트에서 가장 어려운 개념을 말하라면 아마 클로저를 말할것같다.

        클로저를 이야기하기 전에, 

        • 자바스크립트의 함수는 변수에 저장이 가능하다는것, (함수의 주소값을 가진다는것)
        • 변수의 스코프와 스코프 적용규칙을 알고있다는것 (let, const, var 들의 스코프)

        이 2가지만 알고 있으면 그리 어렵지 않다.

        [Javascript] 변수가 살아가는곳, scope
        사람도 사는 반경이 있듯 프로그래밍언어에서 변수는 그 삶의 범위가 있다. scope: the range of subject covered by a book, programme, discussion, etc. 프로그래밍에서의 스코프의 의미는 변수를 쓸수있는(사..
        artdev.tistory.com

        // 함수에 대한 포스팅은 나중에 하겠음.


        mdn에서 클로저의 정의를 보면

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

        "함수와 함수가 선언된 어휘적 환경의 조합", "변수의 유효범휘지정"

        이 두부분을 알아야 한다.

        코드를 보면,

        function makeAdder(x) {
          let y = 1;
          return function(z) {
            y = 100;
            return x + y + z;
          };
        }
        • 5번줄의 x는 1번줄에서 매개변수로 받은 값을 그대로 가진다.
        • 5번줄의 y는 4번줄에서 100으로 설정한 그 값 그대로를 가진다.

        makerAdder 함수는 함수를 리턴한다. 

        그 함수는 x+y+z를 리턴한다. 변수 x와 y는 makeAdder함수에서 선언된 변수이다.

        전에 포스팅했던 scope 규칙을 이해했다면 당연한 말이 된다. 

        "블록 밖에서 선언된 변수는 블록 안에서도 사용이 가능하다." 이것만 알고 있으면 50%는 클로저를 이해했다고 생각한다.

        따라서 x,y 변수는 makeAdder가 리턴하는 함수에서도 사용이 가능하다.

        makeAdder함수를 실행시키면 

        let add5 = makeAdder(5); 
        // x = 5; 가 되면서 리턴하는 함수에 5가 들어간다.
        
        add5 = function(z){
          return 5+100+z;
        };
        //add5에 실제 할당된 함수는 이렇다.

         

        add5는 그 자체로 변수에 할당된 값을 머금고 있다.

        (여기서 클로저의 사전적의미를 생각해보면, 왜 이것이 클로져라 불리는지 이해가 간다. )

        makeAdder가 실행되면서 함수를 리턴하기 때문에 add5를 실행시키면 x,y,z 값의 합이 리턴된다.

        let total = add5(10) // 5+100+10 = 115

        add5를 실행시키면 add5안에 머금고 있던 값들과 인자값10이 모두 더해저 115가 나온다.

        이것이 클로져를 사용한 대표적인 예제라고 할수 있겠다.

        mdn에서 클로저를 설명한 문서를 보면 좀더 이해하기 쉬울것이다.

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

         

        728x90
        반응형

        'SOFTWARE DEVELOP > JAVASCRIPT' 카테고리의 다른 글

        [Javasvript] this는 가리킬뿐, this의 4가지 바인딩  (0) 2020.01.26
        [Javascript] 객체를 만드는 방법, (class, function)  (0) 2020.01.20
        [Javascript] 변수가 살아가는곳, scope  (0) 2020.01.17
        [Javascript] 함수 선언문과 함수 표현식, 그리고 호이스팅  (0) 2020.01.16
        [Javascript] 값을 저장하는 방식, pass by value vs. pass by reference  (0) 2020.01.15
        다음글
        다음 글이 없습니다.
        이전글
        이전 글이 없습니다.
        댓글
      조회된 결과가 없습니다.
      스킨 업데이트 안내
      현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
      ("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
      목차
      표시할 목차가 없습니다.
        • 안녕하세요
        • 감사해요
        • 잘있어요

        티스토리툴바