inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

실전 자바스크립트

lexical environment 1

궁금해서 명세를 찾아봤는데요

해결된 질문

204

비오

작성한 질문수 55

1

lexical environment라는 것은 제거되는 것이 아니지 않나요?

인터프리터에 의해 해석되는 자바스크립트임에도 불구하고, 분명 compiler가 js를 먼저 해석하고 그때 compilation 단계에서 lexical environment가 생성되죠.

그리고, 정확히말하자면 execution context의 구성요소로 lexical environment 정보를 담은 record가 있는 것이구요. 

함수가 종료되면 excution context는 제거 됩니다. 하지만 return으로 반환된 함수가 실행될때 생성되는 lexical environement는 그 이전 함수 실행 컨텍스트의 구성요소로 들어가는 lexical environment record를 참조하는 것이 아니라, lexing time에 이미 만들어진 lexical environment를 참조하고, 이 lexical environment는 outer lexical environment에 대한 reference를 가지고 있기 때문에 참조가 가능한 것 아닌가요? 

javascript es6

답변 3

1

비오

네 감사합니다.

1

이재승

안녕하세요
제가 질문을 잘 이해한건지 모르겠지만, 아래처럼 이해했습니다
```
lexical environment 는 함수 호출 시점이 아니라 함수 정의 시점에 생성되는 것 아닌가?
그리고 함수 실행 시점에는 정의된 시점에 생성된 lexical environment 를 단순히 참조하는 것 아닌가?
```

위 질문에 대해 답을 하자면 함수 호출 시점에 생성되는 게 맞는 것 같습니다
ES 명세에 아래 문장이 있는데요,
```
A function environment is a Lexical Environment that corresponds to the invocation of an ECMAScript function object
```
invocation 이라는 단어로 보아 호출 시점에 생성되는 것 같습니다
https://www.ecma-international.org/ecma-262/#sec-lexical-environments

javascript.info 의 아래 문장은 좀 더 구체적으로 함수 호출 시점을 언급하고 있습니다
```
When a function runs, at the beginning of the call, a new Lexical Environment is created automatically to store local variables and parameters of the call.
```
https://javascript.info/closure#step-3-inner-and-outer-lexical-environment

개인이 답한 내용이긴하지만 stackoverflow 의 아래 내용도 함수 호출 시점을 얘기하고 있습니다
```
Now, for every execution context -- 1) a corresponding lexical environment is created
```
https://stackoverflow.com/a/50174232/12896859

그리고 함수 호출 시점에 lexical environment 가 생성되는 게 맞다면, 함수 실행이 종료되는 시점에 제거되는 게 맞을 것 같네요
사실 ES 명세에도 나와있지만 lexical environment 는 명세를 위한 정의일뿐, js 엔진을 구현할 때는 각자 최적화 방식이 다를 수 있습니다

0

비오

표현이 장황해서 정확히 표현이 되었는지 모르겠습니다.
줄여서 표현하자면, 각 execution context가 가지는 Lexical environment가 참조하는 outer Lexical Environment에 대한 참조는 애초에 별개로 존재하는 것 아닌가 하는 질문입니다. 

일종의 pointer처럼요. 그래서 execution context가 stack에서 사라지더라도, 어짜피 그것은 참조이기 때문에 상관이 없다. 뭐 이런 생각이었습니다.

프론트엔드 학습 수준 문의

0

22

2

리액트 챕터별 코드에서 eslint 설정파일이 없어요

0

38

2

최근 코테, 과제 테스트 트렌드

0

55

2

lucide react 아이콘 설치

0

35

2

17강 zustand store 서버에서 생성

1

30

1

문의관련 문의

0

37

2

next.js 를 2대이상 실행하는 경우 제공하는 cache 기능들은 어떻게 되나요?

0

47

2

yield 입력값

0

374

1

화살표함수에서 아규먼츠를 사용할수없어서 매개변수를 사용하라고 하셨는데..

0

309

1

실전자바스크립트 var문제점

0

280

1

강의 자료는 어디 있나요?

0

289

1

github에 정리좀하려고하는데, 해당 예제코드들 따로 공유가능할ㄲ요?

0

259

1

3:18 부분 질문드립니다. (lexical environment)

0

234

1

2:30초 경 그림 질문

0

342

3

constructor 질문있습니다!

0

258

2

nulish coalescing 과 optional chaining의 차이점은 무엇인가요?

0

322

1

프로토타입 예제에서 궁금한게 있습니다.

0

233

2

마지막 예제 질문드립니다.

1

199

1

2:24경 설명

1

170

1

7분42초

1

167

1

리액트 내에서 const질문입니다.

1

193

1

궁금한것이 있습니다.

1

328

1

sample 파일 예제 소스는 어디있죠 ??

1

263

1

각 함수가 실행되면

2

174

1