Closure

이주희·2022년 4월 13일
0

JavaScript

목록 보기
18/49

Closure

내부함수에서 외부 함수의 지역변수에 접근하는것을 클로저라고 한다.

1. 함수를 리턴하는 함수

  • aaa()의 실행 결과 : bbb 함수

  • aaa()()의 실행 결과 : bbb()의 실행 결과

  • aaa()()는 aaa()가 리턴한 함수가 무엇이든간에 실행시키기 때문에, 리턴되는 함수의 이름(bbb)는 중요하지 않다.

2. Closure :: 외부함수의 지역 변수에 접근

  • 내부함수가 실행되었기 때문에 banana가 출력된다.

  • apple도 외부함수에 있기 때문에 스코프체인에 의해서 접근이 가능하므로 출력된다.

  • 내부함수에서 외부 함수의 지역변수에 접근하는것을 클로저라고 한다.

외부에서 매개변수로 받아와도 실행 결과는 동일하다. 👉🏻 HOC에서 쓰일 방식이다.


개발자 도구 > Sources에서 디버깅해서 자세히 살펴보자!

class/pages/23-03-closure/closure.html

1. 디버깅 활용법

  • aaa()를 실행하는 부분에 break point를 걸어주고 새로고침을 하면
    aaa()가 실행되기 직전에 멈춘다.

  • call stack: 실행하는 함수들을 stack 형태로 쌓아놓는다.
    마지막에 들어온 것이 먼저 실행되어서 빠져나간다.
    (Ctrl+z 실행 취소와 순서가 유사하다.)

2. 호이스팅

  • aaa 함수가 실행되기 시작하면, apple, bbb, qqq가 할당은 되지 않았지만 선언된 것을 볼 수 있다.(호이스팅)
    (실행이 되면 할당이 된다.)

3. Closure

  • bbb 함수가 실행되면 생기는 Closure는,
    실행 컨텍스트에서 사용되고 있는 내부 함수bbb의 외부함수aaa의 지역변수이다.

  • 스코프체인 때문에 bbb 안에서 apple이 사용될 수 있는 것이다.

profile
🍓e-juhee.tistory.com 👈🏻 이사중

0개의 댓글