- Raw_Data 자동 정리 산출물이 각 도메인 From_RawData/ 로 편입, 00_INDEX 연결 갱신
- 컴퓨터_이사_체크리스트.md 추가 (두뇌-상대 경로 규약 v2.2.304 — 새 컴퓨터에서
바꿀 절대 경로는 localBrainPath 1개)
- Astra 세션 산출물(에피소드 기억·기능 인벤토리) 갱신
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
스코프(Scope)는 변수와 함수가 선언된 위치에 따라 접근할 수 있는 유효 범위를 결정하며, 자바스크립트의 실행 컨텍스트 내에서 Lexical Environment를 통해 동적 및 정적으로 관리되는 식별자 참조 체계이다.
🧠 핵심 개념 (Core concepts)
Lexical Environment (어휘적 환경): 실행 중에 발생하는 코드 내 변화를 실시간으로 반영하며, 현재 환경의 식별자 정보를 저장하는 environmentRecord와 외부 환경을 가리키는 outerEnvironmentReference로 구성된다.
Scope Chain (스코프 체인): 현재 컨텍스트의 Lexical Environment에서 변수를 찾지 못할 경우, outerEnvironmentReference를 통해 상위 스코프를 탐색하여 전역 컨텍스트까지 추적해 나가는 논리적 검색 메커니즘.
Lexical Scope (어휘적 스코프): 함수가 어떻게 호출되는지가 아니라, 함수가 '정의된 위치(선언 위치)'에 따라 고정되어 결정되는 스코프.
🧩 추출된 패턴 (Extracted patterns)
식별자 검색 패턴 (Identifier Resolution Pattern): 변수 검색 요청 발생 ➔ 현재 컨텍스트의 Lexical Environment(environmentRecord) 검색 ➔ 실패 시 outerEnvironmentReference를 통한 상위 스코프 추적 ➔ 전역 스코프 도달 ➔ 실패 시 undefined 반환 또는 ReferenceError 발생.
⚖️ 비교 및 선택 기준 (Comparison & decision criteria)
항목 (Option)
장점
단점
언제 선택
Lexical Scope
함수 선언 위치에 따라 결정되므로 코드의 흐름과 변수 참조 범위를 정적으로 예측하고 파악하기 쉬움
런타임의 동적 호출 맥락(누가 호출했는가)을 반영하지 않음
식별자(변수, 함수 등)의 유효 범위를 결정하고 스코프 체인을 통해 참조 관계를 구성할 때 적용
This 바인딩
함수가 어떻게 호출되느냐에 따라 동적으로 가리키는 객체가 변하므로 유연한 객체 지향 및 메서드 재사용이 가능
호출 방식(일반, 메서드, new, 명시적 바인딩)에 따라 값이 달라져 디버깅 시 값 추적이 까다로울 수 있음
객체의 상태를 조작하거나 메서드, 생성자 함수 등 실행 컨텍스트의 주체 객체를 식별해야 하는 경우
📖 세부 내용 (Details)
사용자가 웹페이지에 처음 접근하면 자바스크립트 엔진이 코드를 스캔하여 변환 및 실행을 관리하는 실행 컨텍스트(Execution Context) 환경을 생성하며, 이는 스코프(Scope), 호이스팅, 클로저, this 등의 핵심 동작 원리를 포함한다 [S1].
스코프의 실체적 구조는 실행 컨텍스트를 구성하는 Lexical Environment에 기반한다. Lexical Environment는 동적인 활동을 실시간으로 반영하며 두 가지 하위 구조로 이루어진다 [S1].
environmentRecord: 실행 컨텍스트 내에서 선언된 변수와 함수 선언들의 실제 값을 저장한다 [S1].
outerEnvironmentReference: 현재 컨텍스트가 위치한 코드의 외부 스코프(상위 스코프)에 대한 참조를 유지한다 [S1].
스코프 체인(Scope Chain) 동작 원리: 코드에서 특정 변수를 찾을 때, 자바스크립트 엔진은 우선 현재 컨텍스트의 Lexical Environment를 검색한다 [S1]. 만약 그곳에서 식별자를 찾지 못하면 outerEnvironmentReference를 통해 상위 스코프의 Lexical Environment를 검색한다 [S1]. 이 검색은 전역(Global) 컨텍스트의 Lexical Environment에 도달할 때까지 계속되며, 끝내 변수를 찾지 못하면 undefined나 ReferenceError를 반환하게 된다 [S1].
Lexical Scope와 this 바인딩의 차이: 함수의 Lexical Scope는 그 함수가 정의된 정적인 위치에 따라 상위 스코프가 고정적으로 결정되는 반면, this 바인딩은 선언 위치와 무관하게 함수가 '어디서 어떻게 호출되느냐'에 따라 가리키는 대상이 동적으로 달라지는 차이점이 있다 [S1].
⚖️ 모순 및 업데이트 (Contradictions & updates)
소스 내에서 상충되는 정보나 모순된 업데이트 내역은 확인되지 않음.
🛠️ 적용 사례 (Applied in summary)
현재 발견된 실제 적용 사례가 없습니다. (소스에 구체적인 코드 파일 경로, Git 커밋 해시, 결정 기록 등이 포함되어 있지 않음)
💻 코드 패턴 (Code patterns)
// 소스 [S1]의 petInfo 예제 구조를 구현한 Lexical Scope 및 스코프 체인 패턴
letgreeting="Hello";// 상위 스코프 (전역 환경)
functionpetInfo(){// petInfo 함수의 LexicalEnvironment(environmentRecord)에 저장되는 변수들
letcat="Meow";letdog="Woof";// 현재 스코프에 없으므로 outerEnvironmentReference를 통해 상위 스코프를 탐색하여 접근
console.log(greeting);console.log(cat,dog);}petInfo();// 함수 외부(전역 스코프)에서 내부 스코프의 변수에 접근을 시도할 경우,
// 해당 스코프의 LexicalEnvironment에 존재하지 않으므로 ReferenceError를 반환함
// console.log(cat);