Replies: 1 comment
-
1. Execution Context(실행 컨텍스트)가 무엇인가요?실행 컨텍스트는 실행할 코드에 제공할 환경 정보들을 모아놓은 객체입니다. 실행 컨텍스트는 활성화되는 시점에 VariableEnvironment, LexicalEnvironment, ThisBinding의 세 가지 정보로 구성되어 있습니다. 실행 컨텍스트가 생성될 때는 VariableEnvironment와 LexicalEnvironment가 동일한 내용으로 구성되지만, LexicalEnvironment는 함수 실행 도중에 변경되는 사항이 즉시 반영된다는 차이가 있습니다. VariableEnvironment와 LexicalEnvironment는 environmentRecord와 outerEnvironmentReference로 구성돼있습니다.
2. hoisting의 정확한 의미를 설명할 수 있나요?호이스팅은 실행 컨텍스트의 생성 단계에서 함수 선언과 변수 선언 및 초기화를 수행하고, 실행 단계에서 변수 할당을 수행하는 JS 동작 원리로 인해 선언문이 해당 스코프의 최상단으로 끌어올려지는 것처럼 보이는 현상을 뜻합니다. 3. closure가 무엇인지, JS에서 clsoure가 가능한 기술적 이유를 설명해주세요.클로저의 개념적 의미는 함수와 함수가 선언된 Lexical Environment의 조합입니다. 프로그래밍을 할 때의 실질적인 의미는 함수가 함수 외부에 선언된 변수를 기억하고, 이 외부 변수에 언제든 접근할 수 있는 함수를 클로저라고 합니다. 함수가 선언될 때 Environment라는 내부 슬롯에 상위 Lexical Environment를 저장해두었다가, 실행될 때 Outer Environment Reference에 상위 LexicalEnvironment를 참조하도록 합니다. 이를 통해 Lexical Environment가 선언 기준으로 Linked List로 연결되어 Lexical Scope Chaining이 가능해지고, Lexical Environment에 대한 참조가 살아있기 때문에 Execution Context가 사라져도 Lexical Environment의 Environment Record는 Garbage Collection의 대상에서 제외됩니다. 이런 이유로 JS에서 closure가 가능합니다. |
Beta Was this translation helpful? Give feedback.
-
Beta Was this translation helpful? Give feedback.
All reactions