클로저 & 스코프 체인

2020. 10. 22. 20:04웹 프론트엔드 깊게 이해하기/자바스크립트 이해하기

호출되는 변수나 함수명을 찾을 , 들여다보는 영역이 바로 스코프이다.

 

자바스크립트는 함수 단위로 스코프가 생겨난다고 보면 된다.

(물론 스코프만 따로 생성 있지만 그럴 이유는 없다)

 

, 함수가 2 있으면 스코프도 2 생기는 것이다.

 

스코프는 간단하게 변수 혹은 상수 명과 담긴 것이 짝지어진 표가 있다고 생각하면 된다.

 

함수는 호출되었을 가장 먼저 자신의 스코프 안에서 활용할 변수 혹은 상수들을 찾는다.

그리고 스코프 안에 없는 변수 혹은 상수가 있다면 상위 스코프에서 한번 찾고, 이를 찾을 때까지 상위로 옮겨가며 반복한다.

 

스코프끼리 상위, 하위 관계로 연결되어 있는 것이 스코프 체인이다.

 

스코프에서는 원칙이 있는데, 하위 스코프에서는 상위 스코프의 변수 혹은 상수에 접근할 있지만 상위 스코프에서는 하위 스코프의 변수 혹은 상수에 절대 접근할 없다. 하지만 해당 하위 스코프를 형성하고 있는 함수를 호출하는 것은 가능한데, 해당 함수에 함수의 스코프 안에 있는 변수 혹은 상수에 접근하는 로직이 있다면 결과적으로는 상위 스코프에서 함수를 통해 함수의 스코프에 있는 변수 혹은 상수에 접근하게 되는 셈이다.

 

이렇게 상위에서 하위 스코프로 접근을 허용해주는 함수를 클로저 함수라고 하고, 이러한 접근 자체를 클로저라고 한다.

 

개념이 다른 프로그래머들에게 생소하게 다가오는 이유는 다른 언어에서는 함수가 선언될 , return 있든 없든 함수 선언이 종료되면 return 외의 모든 함수 안의 변수 혹은 상수값이 메모리에서 사라지기 때문에 이러한 접근이 불가능하지만, 자바스크립트에서는 상위 스코프들을 하위 스코프에서 간직하고 있기 때문에 메모리 상에서 사라지지 않고, 접근이 가능해지는 것이다.