2020. 10. 22. 20:04ㆍ웹 프론트엔드 깊게 이해하기/자바스크립트 이해하기
호출되는 변수나 함수명을 찾을 때, 들여다보는 영역이 바로 스코프이다.
자바스크립트는 함수 단위로 스코프가 생겨난다고 보면 된다.
(물론 스코프만 따로 생성 할 수 있지만 그럴 이유는 없다)
즉, 함수가 2개 있으면 스코프도 2개 생기는 것이다.
스코프는 간단하게 변수 혹은 상수 명과 담긴 것이 짝지어진 표가 있다고 생각하면 된다.
함수는 호출되었을 때 가장 먼저 자신의 스코프 안에서 활용할 변수 혹은 상수들을 찾는다.
그리고 그 중 스코프 안에 없는 변수 혹은 상수가 있다면 상위 스코프에서 한번 더 찾고, 이를 찾을 때까지 상위로 옮겨가며 반복한다.
스코프끼리 상위, 하위 관계로 연결되어 있는 것이 스코프 체인이다.
스코프에서는 원칙이 있는데, 하위 스코프에서는 상위 스코프의 변수 혹은 상수에 접근할 수 있지만 상위 스코프에서는 하위 스코프의 변수 혹은 상수에 절대 접근할 수 없다. 하지만 해당 하위 스코프를 형성하고 있는 함수를 호출하는 것은 가능한데, 이 때 해당 함수에 그 함수의 스코프 안에 있는 변수 혹은 상수에 접근하는 로직이 있다면 결과적으로는 상위 스코프에서 함수를 통해 그 함수의 스코프에 있는 변수 혹은 상수에 접근하게 되는 셈이다.
이렇게 상위에서 하위 스코프로 접근을 허용해주는 함수를 클로저 함수라고 하고, 이러한 접근 자체를 클로저라고 한다.
이 개념이 다른 프로그래머들에게 생소하게 다가오는 이유는 다른 언어에서는 함수가 선언될 때, return 이 있든 없든 함수 선언이 종료되면 return 값 외의 모든 함수 안의 변수 혹은 상수값이 메모리에서 사라지기 때문에 이러한 접근이 불가능하지만, 자바스크립트에서는 상위 스코프들을 하위 스코프에서 간직하고 있기 때문에 메모리 상에서 사라지지 않고, 접근이 가능해지는 것이다.
'웹 프론트엔드 깊게 이해하기 > 자바스크립트 이해하기' 카테고리의 다른 글
객체 지향 프로그래밍의 원칙 (0) | 2020.12.13 |
---|---|
객체 및 프로토타입 (0) | 2020.11.26 |
ES6 import & export (0) | 2020.10.22 |
화살표 함수에 없는 3가지 (0) | 2020.10.22 |
THIS 의 이해 (0) | 2020.10.22 |