자바스크립트를 배우면서 개념을 이해하는 것과 용어를 이해하는 것이 매우 어렵습니다. 특히 다른 언어를 접하지 않은 경우 많은 글들이 잘 모르는 용어를 사용하기도 하는데 일반적으로 엔지니어 출신이 아니라면 알 수 없는 용어도 참 많은게 현실입니다. 예를들어 C 또는 자바를 배운적이 없는데 기본이라 생각되는 이 언어와 비교를 하면서 설명하는 서적들이 많습니다. 이는 비전공자를 더 어렵게 만들고 중도 탈락자를 만들기도 하죠.

하지만 결론은 책은 모든 것을 말해줄 수 없다는 점과 어떤 책도 100% 만족할 수는 없다는 점입니다. 책이 가진 일부, 일부를 내것으로 만들면 언젠가는 내 안에서 하나가 될 것입니다. 서두가 길었지만 스코프와 콘텍스트의 개념에 대하여 알아보겠습니다.


! 스코프(scope)란?


스코프는 코드가 실행되는 영역을 의미합니다. 보통 우리가 함수 또는 변수의 스코프를 정의하는데 이는 그 함수 또는 변수가 적용되는 영역, 공간 또는 범위를 말한다고 할 수 있습니다. 이 코드가 실행되는 콘텍스트(context)가 스코프의 범위라 할수 있는데 콘텍스트는 개념이 조금씩 틀립니다. 사전적의미로 배경, 영역등을 의미하고 사전적 의미로 보면 스코프가 콘텍스트이기도 합니다.

하지만 콘텍스트는 대게 좀 더 정확한 영역을 말하며 실행되는 DOM객체를 의미하거나 해당하는 태그 또는 특정 객체를 콘텍스트로 지정하기도 합니다. 이에비해 스코프라고 하면 딱 정하기 보다 여기서부터 여기까지라는 범위의 개념이라고 알아두면 되겠습니다.

이 스코프는 크게 세 가지로 구분되는데 ...

1. 전역 스코프
2. 지역 스코프
3. eval 스코프


전역스코프는 스코프중에서도 가장 최상위에 위치한 영역으로 전역스코프에 설정된 변수는 어디에서든 사용할 수 있습니다. 이와 달리 지역 스코프는 말그래도 한정된 지역, 영역을 가지기 때문에 이를 벗어나서 사용할 수는 없습니다.

eval의 경우 eval()을 사용해 매개변수를 사용하면 이를 사용했을 경우에만 해당 스코프에 담긴 값을 불러옵니다. 각각의 스코프가 틀리기 때문에 서로 다른 값을 고유의 영역에서 고유의 값을 가지는 것이 스코프를 사용하는 이유이며 특징입니다.

참고로 어떤 변수에서 값을 찾을 경우 지역스코프에서 가장 먼저 해당하는 값이 있는지 찾기 시작합니다. 이를 찾으면 반환하겠지만 없는 경우 스코프 체인에 따라 점점 더 상위 스코프에 올라가 값을 찾으며 전역스코프까지 올라갔으나 매칭되는 값이 없는 경우 undefined를 반환하게 됩니다.