JS Closure

김루루룽·2022년 4월 14일
0

React, Next.js

목록 보기
19/42

Closure

클로저는 함수와 함수가 선언된 어휘적 환경의 조합이다.

function outerFunc() {
  var x = 10;
  var innerFunc = function () { console.log(x); };
  innerFunc();
}

outerFunc(); // 10

함수 outerFunc 내에서 내부함수 innerFunc가 선언되고 호출되었다.
이때 내부함수 innerFunc는 자신을 포함하고 있는 외부함수 outerFunc의 변수 x에 접근할 수 있다.
이는 함수 innerFunc가 함수 outerFunc의 내부에 선언되었기 때문이다.

스코프는 함수를 호출할 때가 아니라 함수를 어디에 선언하였는지에 따라 결정된다.
이를 렉시컬 스코핑(Lexical scoping)라 한다.
위 예제의 함수 innerFunc는 함수 outerFunc의 내부에서 선언되었기 때문에 함수 innerFunc의 상위 스코프는 함수 outerFunc이다.
함수 innerFunc가 전역에 선언되었다면 함수 innerFunc의 상위 스코프는 전역 스코프가 된다.

함수 innerFunc가 함수 outerFunc의 내부에 선언된 내부함수이므로 함수 innerFunc는 자신이 속한 렉시컬 스코프(전역, 함수 outerFunc, 자신의 스코프)를 참조할 수 있다.


이때 aaa안에 함수의 이름이 무엇이든 상관없다
나온 리턴 함수를 이름을 부르지 않아도 바로 실행할 수 있기 때문이다.


스코프 체인에 의해 내부함수에서 외부 함수에 있는 apple을 사용할 수 있게된다
이 영역을 closure라고 한다.

profile
1day 1push..plz

0개의 댓글