클로저 다시 보기?

적자생존·2022년 8월 8일
0

javascript restart

목록 보기
28/31

1. 클로저를 알기 위해서는 스코프 체인을 알아야 한다.

함수를 선언하면

오른쪽 그림처럼 스코프가 생기게 된다.

즉 outer라는 공간(함수) 안에 a라는 변수의 이름에 1이 할당이 되있는 것이다.

이제 outer라는 함수 내부에 inner라는 함수를 만들어 보면

다음과 같이 된다.

outer라는 함수 스코프 안에 inner라는 함수의 스코프가 새로 생성되어 있는 것이다.

그래서 inner에서 console.log(a)를 실행하게 되면 inner 스코프의 범위에서 찾고 그게 있으면 a를 출력시켜 준다.

하지만 없다면 어떻게 될까?

inner에서는 b라는 변수를 호출하게 되었다.

그러면 자바스크립트는 inner에서 찾게되고 inner에서 없으면 그 상위의 스코프인(자기가 포함되어 있는 스코프) outer의 스코프에서 변수 b를 찾게 된다.

그렇기 때문에 문자 B가 출력이 되는 것이다.

inner에서 실행 시 스코프 찾는 순서는 inner스코프를 찾고 없으면 outer 있으면 inner에서 찾아서 출력한다.

2. 글로벌 스코프

만약 함수 외부에서 선언된 변수를 찾고 싶다면?

inner에서 실행 된 것을 보면
let c 를 콘솔에 찍었다.

inner스코프에서 변수 c를 찾고 없으니 outer스코프에서 c를 찾고 없으니 마지막으로 글로벌스코프에서 c를 찾아서 출력을 해 주었다.

이런걸 스코프체인이라고 한다.

3. 클로저

선언한 시점에 스코프 체인을 계속 들고 있는다.

hi라는 함수가 실행이 될때 outer의 inner를 리턴하게 된다.

이때 inner라는 함수는 b를 콘솔에 찍어주는데 inner스코프에는 b가 없기 때문에 outer스코프에 b를 찾게 된다.

그렇기 때문에 inner는 outer의 스코프를 참조해야하기에 outer의 스코프가 사라지지 않는다.

따라서 inner의 외부의 변수에 접근할 수 있게 된 것이다.

profile
적는 자만이 생존한다.

0개의 댓글