Conversation
출력 결과 전역 코드의 평가를 시작. foo, bar가 렉시컬 환경의 선언적 환경 레코드에 등록됨 이후 전역 코드를 실행 foo 함수가 호출되어 foo 함수의 평가 과정이 시작. 이때 전역 코드의 실행 중지되며, foo 함수 실행 컨텍스트를 생성 함 foo 함수 렉시컬 환경이 완성되면 컨텍스트 스택에 푸쉬 foo 함수가 실행되어 value에 값을 할당 = 환경 레코드의 식별자 value에 값 바인딩 bar 함수의 평가가 시작되면 foo 함수와 동일하게 수행하며 bar 함수 코드 실행 즉 정리하면 bar 함수는 어디서 정의했는지에 따라 렉시컬 환경의 OuterLexicalEnvironmentRefrence를 결정하여 전역 렉시컬 환경이 바인딩 되고, 전역 코드의 실행이 value에 값을 할당하기 전(선언적 환경 레코드에 등록하기 전) 실행이 중지되었기 때문에 TDZ에 빠졌으므로 참조 에러가 발생
식별자 검색? 전역 코드 평가 단계에서 x, foo는 선언적 환경 레코드에 등록되어 바인딩 되고 foo는 함수 객체 할당 foo 함수의 실행이 시작되어 y는 2가 바인딩되고 console.log(x + y) 평가. 가장 먼저 console 에 대한 식별자를 해석하는데 먼저 렉시컬 환경에서 console 식별자를 찾으나 foo 함수 렉시컬 환경에는 존재하지 않으므로 스코프 체인에 따라 OuterLexicalEnvironmentReference가 가리키는 전역 렉시컬 환경으로 이동. 이후 foo 함수 실행 컨텍스트가 팝 되고 전역 실행 컨텍스트도 팝 되어 실행 종료 |
|
Q1. 이유:
Q2. Q3.
Q4.
|
Q1. 아래 코드의 실행 결과를 예측하고, 그 이유를 자세히 설명해주세요.실행 결과 ReferenceError가 출력된다. 이때 const value는 선언되었지만 아직 초기화되지 않았으므로 TDZ(Temporal Dead Zone) 상태에 있다. 이후 전역 코드가 실행되면서 foo()가 호출된다. 코드 제어권이 foo 함수로 넘어가면 foo의 실행 컨텍스트가 생성되고, foo의 환경 레코드에는 지역 변수 value가 등록된다. value에는 'foo의 const'가 할당된 뒤 bar()가 호출된다. bar 함수가 실행되면 bar의 실행 컨텍스트가 생성되고, 자바스크립트 엔진은 console.log(value)에서 value를 찾기 위해 스코프 체인(렉시컬 환경의 외부 참조) 을 따라 검색을 시작한다. bar의 지역 스코프에는 value가 없으므로, bar가 선언된 상위 스코프인 전역 렉시컬 환경으로 검색을 이어간다. 하지만 전역 변수 value는 아직 초기화되지 않은 상태(TDZ)다. 왜냐하면 foo()가 호출될 때까지 전역 코드 실행이 완료되지 않았기 때문이다. 따라서 이 시점에서 value에 접근하면 ReferenceError가 발생한다. 즉, 실제 출력 결과는 ReferenceError: Cannot access 'value' before initialization 이다. Q2. 빈칸 채우기Q3. O/X 퀴즈, 틀렸다면 내용을 적절히 수정해주세요.
Q4. 식별자 검색에 대해 설명하고, 아래 코드에서 console 키워드를 찾는 과정을 Outer Lexical Environment Reference, 식별자 검색과 스코프 체인을 통해 자세히 설명해주세요.const x = 1;
function foo() {
const y = 2;
console.log(x + y);
}
foo();foo()가 실행되면 console.log(x + y)에서 y는 foo의 렉시컬 환경에서, x는 전역 렉시컬 환경에서, console은 전역의 객체 환경 레코드(즉, 전역 객체, 브라우저라면 window의 프로퍼티)에서 찾아져 호출되며 결과적으로 3이 출력된다. 식별자 검색에 대해 간단히 설명하자면, 현재 렉시컬 환경의 Environment Record부터 시작해, 식별자를 찾을 때까지 Outer 참조를 따라 안쪽 → 바깥쪽으로 차례차례 검색한다. 전역에 도달하면 전역의 Declarative 레코드(전역에 선언된 let/const/var)를 확인하고, 그 다음 전역의 Object Environment Record(바인딩 객체, aka 전역 객체)의 프로퍼티를 확인한다. 찾지 못하면 ReferenceError를 발생시킨다. 실제 코드에서의 단계별 검색 흐름
전역 렉시컬 환경에는
엔진은 식별자들을 평가하면서
|
Q1.실행 결과: ReferenceError
Q2실행 컨텍스트는 ( 식별자 )의 등록과 관리 및 ( 코드 )의 실행 순서를 결정하는 자바스크립트의 내부 메커니즘이다. 실행 컨텍스트는 LexicalEnvironment 컴포넌트를 포함한다. 렉시컬 환경은 ( Environment Record )와 ( Outer Lexical Environment Reference )로 구성된다. ( Environment Record )는 식별자와 이에 바인딩된 값을 관리하는 저장소이고, 전역 환경 레코드는 BindingObject에 바인딩된 ( 객체 환경 레코드 )와, Q3
Q4.
|
Q1. 아래 코드의 실행 결과를 예측하고, 그 이유를 자세히 설명해주세요.function foo() {
const value = 'foo의 const';
bar();
}
function bar() {
console.log(value);
}
foo();
const value = '전역의 const'ReferenceError
Q2. 빈칸 채우기실행 컨텍스트는 (식별자)의 등록과 관리 및 (코드)의 실행 순서를 결정하는 자바스크립트의 내부 메커니즘이다.
실행 컨텍스트는 LexicalEnvironment 컴포넌트를 포함한다.
렉시컬 환경은 (Environment Record)와 (Outer Lexical Environment Reference)로 구성된다.
(Environment Record)는 식별자와 이에 바인딩된 값을 관리하는 저장소이고,
(Outer Lexical Environment Reference)는 상위 스코프에 대한 참조를 가지고 있어 (스코프 체인)을 구현하는 데 사용된다.
전역 환경 레코드는 BindingObject에 바인딩된 (객체 환경 레코드)와,
let/const 키워드로 선언된 전역 변수를 관리하는 (선언적 환경 레코드)로 구성된다.선택지 (중복 사용 가능): A. 선언적 환경 레코드 B. 스코프 체인 C. Lexical Environment D. 객체 환경 레코드 E. Outer Lexical Environment Reference F. 코드 G. Environment Record H. 식별자 Q3. O/X 퀴즈, 틀렸다면 내용을 적절히 수정해주세요.
Q4. 식별자 결정에 대해 설명하고, 아래 코드에서 ㄱconst x = 1;
function foo() {
const y = 2;
console.log(x + y);
}
foo();식별자 결정
|
A1.[예상 결과] A2.실행 컨텍스트는 **(H. 식별자)**의 등록과 관리 및 **(F. 코드)**의 실행 순서를 결정하는 자바스크립트의 내부 메커니즘이다. (사실확인) 실행 컨텍스트는 LexicalEnvironment 컴포넌트를 포함한다. (O) 렉시컬 환경은 **(G. Environment Record)**와 **(E. Outer Lexical Environment Reference)**로 구성된다. **(G. Environment Record)**는 식별자와 이에 바인딩된 값을 관리하는 저장소이고, 전역 환경 레코드는 BindingObject에 바인딩된 **(D. 객체 환경 레코드)**와, A3.
A4.식별자 결정은 현재 실행 중인 코드가 어떤 렉시컬 환경에서 시작해 환경 레코드에서 식별자를 찾고, 없으면 외부 렉시컬 환경에 대한 참조를 따라 상위 스코프로 올라가는 과정이다. 이 연결 고리를 스코프 체인이라고 한다. const x = 1;
function foo() {
const y = 2;
console.log(x + y);
}
foo();
|
Q1. 아래 코드의 실행 결과를 예측하고, 그 이유를 자세히 설명해주세요.
Q2. 빈칸 채우기
선택지 (중복 사용 가능):
A. 선언적 환경 레코드
B. 스코프 체인
C. Lexical Environment
D. 객체 환경 레코드
E. Outer Lexical Environment Reference
F. 코드
G. Environment Record
H. 식별자
Q3. O/X 퀴즈, 틀렸다면 내용을 적절히 수정해주세요.
Q4. 식별자 결정에 대해 설명하고, 아래 코드에서
console키워드를 찾는 과정을 Outer Lexical Environment Reference, 식별자 결정과 스코프 체인을 통해 자세히 설명해주세요.