인프런 커뮤니티 질문&답변

1401660님의 프로필 이미지
1401660

작성한 질문수

코어 자바스크립트

Execution Context 관련 궁금증들 질문드립니다

해결된 질문

작성

·

295

0

안녕하세요 !
Execution Context에 강의 정말 잘 들었습니다. 덕분에 Execution Context에 대한 개념을 잡을 수 있었습니다! 감사합니다 😀

Execution Context수강 후 여러 자료를 살펴본 결과
Excution Context가 생성되는 시점은 1.Global,  2.Function call, 3.Eval 등이 있다는 것을 알게 되었습니다.
이와 관련하여 질문드립니다 !

1.
첫 번째로 해당 Execution Context이외에  JS가 업데이트 되면서 추가로 존재하는 Execution Context가 있을까요 ?
만약에 존재한다면 기존의 Context와 동일한 방식으로 동작하나요 ?


2.
두 번째 질문으로 Global Execution Context(GEC)의 소멸시점에 대해 궁금한 것이 있습니다 !
JS CallStack에 쌓여진 GEC의 경우 언제 사라지나요? 네트워크 요청이나, setTimeout과 같은 비동기 작업이 있을때도
가장 마지막에 GEC가 사라지나요?
만약 GEC가 먼저 사라진 경우 비동기 작업처리 후 Callback이 실행되고, 해당 Callback Function이 Global Scope에 있는 변수를 접근한다면 어떤 일이 생기나요 ?


3.
마지막으로는 Lexcial EnvironmentLexical Scope에 대한 개념이 명확하지 않은데요
Lexical Environment는 Execution Context 생성 시, 즉 Function이 call되는 시점에 생성되는 객체 정보라고 알고 있습니다.
반면 Lexical Scope의 경우 정적 스코프로 함수가 선언된 위치의 Scope 정보를 담고 있다고 하던데
실행과 선언에 대한 시점에 대해서 이해가 잘 되지 않습니다. 이 둘 간의 관계에 대해 설명해주실 수 있나요 ?

답변 2

1

정재남님의 프로필 이미지
정재남
지식공유자

1. ES6에서 추가된 블록스코프에 의해서는 실행컨텍스트가 생성되지 않습니다.

그밖에 별도로 추가된 실행컨텍스트는 없습니다.
http://www.ecma-international.org/ecma-262/6.0/#sec-block-runtime-semantics-evaluation

_

2. 전역컨텍스트는 코드 전체가 시작하는 순간 생성되고, 끝나는 순간 소멸합니다.
브라우저의 경우 현재 페이지를 닫을 때,
노드의 경우 해당 명령의 수행을 마치고 다시 prompt로 돌아올 때가 되겠습니다.
전역컨텍스트가 '먼저 사라진 경우' 후에는 콜백이 호출될 수가 없습니다.
호출될 수 있는 환경 자체가 사라졌기 때문입니다.

_

3. 제 강의상의 'Scope'가 곧 Lexical Scope입니다.
'선언된 위치'는 실행컨텍스트의 OuterEnvironmentRefence에 의해 규정됩니다.

전역공간 G의 외부함수 A에서 내부함수 B를 실행한 경우,
B의 outerEnvironmentReference는 A의 LexicalEnvironment를 참조합니다.
다시 A의 outerEnvironmentReference는 G의 LexicalEnvironment를 참조합니다.

B의 실행컨텍스트는 B함수의 '실행'시점에 생성되면서
outerEnvironmentReference는 A의 LexicalEnvironment를 참조하게 되는데,
A의 LexicalEnvironment는 A함수가 실행된 시점에 생성된 것입니다.
그런데 B함수가 선언된 시점은 A함수가 '실행'되었을 때입니다.

그러니까 B의 LexicalEnvironment는 B가 실행될 때에 생성되는 반면,
B의 스코프는 A가 실행될 때, 즉 B가 선언될 때에 정의됩니다.

0

1401660님의 프로필 이미지
1401660
질문자

친절한 답변 정말 감사합니다 !

덕분에 애매했던 개념에 대해서 명확하게 알 수 있었습니다 :)

1401660님의 프로필 이미지
1401660

작성한 질문수

질문하기