에러 안나게 해주세요
스코프,스코프체인,outerEnvironmnetReference 본문
Scope
스코프란 식별자(변수)에 대한 유효범위입니다. 어떤 경계 A의 외부에서 선언한 변수는 A의 외부뿐 아니라 A의 내부에서도 접근이 가능하지만, A의 내부에서 선언한 변수는 오직 A의 내부에서만 접근할 수 있습니다. 이러한 스코프의 개념은 대부분의 언어에 존재합니다.
자바스크립트도 예외는 아닌데, ES5까지의 자바스크립트는 전역공간을 제외하면 오직 함수에 의해서만 스코프가 생성됩니다.
*(ES6에서는 블록에 의해서도 스코프 경계가 발생하게 되었다. let,const,class,strict mode 등.../ 둘을 구분하기 위해서 함수 스코프, 블록 스코프라는 용어를 사용한다.)
함수 스코프 : 함수 내에서 변수를 선언했을 때, 우리는 함수 안에서만 이 변수에 접근할 수 있습니다. 우리가 함수 밖으로 나오게 된 이후에는 함수 내부에 있는 변수에 접근할 수 없습니다.
블록 스코프 : 우리가 변수를 {} 괄호 안에 const나 let키워드로 선언했을 때, 우리는 {}괄호 안에서만 이 변수에 접근할 수 있습니다.
이러한 '식별자의 유효범위'를 안에서부터 바깥으로 차례로 검색해 나가는 것을 스코프 체인(scope chain)이라고 합니다.
그리고 이를 가능케 하는 것이 바로 LexicalEnvironment의 두번 째 수집 자료인 outerEnvironmentReference 입니다.
스코프 체인
outerEnvironmentReference는 현재 호출된 함수가 선언될 당시의 LexicalEnvironment를 참조합니다.
마치 연결리스트 형태를 띱니다.
'선언 시점의 LE'를 계속 찾아 올라가면 마지막엔 전역컨텍스트의 LE가 있을 것입니다. 또한 각 oER은 오직 차례대로만 접근할 수 있고 다룬 순서로 접근하는 것은 불가능할 것입니다. 이런 구조적 특성 덕분에 여러 스코프에서 동일한 식별자를 선언한 경우에는 무조건 스코프 체인 상에서 가장 먼저 발견된 식별자에만 접근 가능하게 됩니다.
- 전역컨텍스트의 LE 까지 탐색해도 해당 변수를 찾지 못하면 undefined를 반환합니다.
전역 컨텍스트의 LE에 담긴 변수를 전역변수라 하고,그 밖의 함수에 의해 생성된 실행 컨텍스트의 변수들은 모두 지역변수 입ㄴ니다. 안전한 코드 구성을 위해 가급적 전역변수의 사용은 최소화 하는 것이 좋습니다.
'language > JavaScript' 카테고리의 다른 글
environmentRecord와 호이스팅 (0) | 2021.01.25 |
---|---|
실행 컨텍스트(execution context) (0) | 2021.01.22 |