-
8.Outer Environment Reference (3주차 -9)JavaScript/3주차-데이터타입, 실행컨텍스트, this 2023. 5. 26. 09:08
Outer Environment Reference (=outer)
- 스코프 : 식별자에 대한 유효범위를 의미, 변수가 어디까지 영향을 미치는지에 관한 것
- 스코프 체인 : 식별자의 유효범위를 안에서부터 바깥으로 차례로 검색해나가는
- outer는 현재 호출된 함수가 선언될 당시(이 말이 중요해요!)의 LexicalEnvironment를 참조해요. 참조한다는 말이 어려우면, 그 당시의 환경 정보를 저장한다. 정보로 이해해도 괜찮습니다.
- 예를 들어, **A함수 내부에 B함수 선언 → B함수 내부에 C함수 선언(Linked List)**한 경우 어떻게 될까요?
- 결국 타고, 타고 올라가다 보면 **전역 컨텍스트의 LexicalEnvironment를 참조**하게 됩니다.
- 항상 outer는 오직 자신이 선언된 시점의 LexicalEnvironment를 참조하고 있으므로, 가장 가까운 요소부터 차례대로 접근 가능
- 결론 : 무조건 스코프 체인 상에서 가장 먼저 발견된 식별자에게만 접근이 가능
- (대부분의 경우 text는 예시보다 항상 어렵죠 ^^;;;; 예시를 통해 볼께요)
// 아래 코드를 여러분이 직접 call stack을 그려가며 scope 관점에서 변수에 접근해보세요! // 어려우신 분들은 강의를 한번 더 돌려보시기를 권장드려요 :) var a = 1; var outer = function() { var inner = function() { console.log(a); // 이 값은 뭐가 나올지 예상해보세요! 이유는 뭐죠? scope 관점에서! var a = 3; }; inner(); console.log(a); // 이 값은 또 뭐가 나올까요? 이유는요? scope 관점에서! }; outer(); console.log(a); // 이 값은 뭐가 나올까요? 마찬가지로 이유도!
각각의 실행 컨텍스트는 LE 안에 record와 outer를 가지고 있고, outer 안에는 그 실행 컨텍스트가 선언될 당시의 LE정보가 다 들어있으니 scope chain에 의해 상위 컨텍스트의 record를 읽어올 수 있다.
'JavaScript > 3주차-데이터타입, 실행컨텍스트, this' 카테고리의 다른 글
9. 상황에 따라 달라지는 This (0) 2023.05.26 7. Record와 호이스팅 (0) 2023.05.25 6. 실행 컨텍스트(스코프, 변수, 객체, 호이스팅), 콜 스택 (0) 2023.05.25 5. null과 undefined (0) 2023.05.25 4. 불변 객체 (깊은 복사 얕은 복사) (0) 2023.05.25