내부함수에서 외부 함수의 지역변수에 접근하는것을 클로저라고 한다.
aaa()의 실행 결과 : bbb 함수
aaa()()의 실행 결과 : bbb()의 실행 결과
aaa()()는 aaa()가 리턴한 함수가 무엇이든간에 실행시키기 때문에, 리턴되는 함수의 이름(bbb)는 중요하지 않다.
내부함수가 실행되었기 때문에 banana가 출력된다.
apple도 외부함수에 있기 때문에 스코프체인에 의해서 접근이 가능하므로 출력된다.
내부함수에서 외부 함수의 지역변수에 접근하는것을 클로저라고 한다.
외부에서 매개변수로 받아와도 실행 결과는 동일하다. 👉🏻 HOC에서 쓰일 방식이다.
개발자 도구 > Sources
에서 디버깅해서 자세히 살펴보자!
class/pages/23-03-closure/closure.html
aaa()를 실행하는 부분에 break point를 걸어주고 새로고침을 하면
aaa()가 실행되기 직전에 멈춘다.
call stack: 실행하는 함수들을 stack 형태로 쌓아놓는다.
마지막에 들어온 것이 먼저 실행되어서 빠져나간다.
(Ctrl+z 실행 취소와 순서가 유사하다.)
bbb 함수가 실행되면 생기는 Closure는,
실행 컨텍스트에서 사용되고 있는 내부 함수bbb
의 외부함수aaa
의 지역변수이다.
스코프체인 때문에 bbb 안에서 apple이 사용될 수 있는 것이다.