코어 자바스크립트 헷갈리는 부분 정리

2025. 4. 29. 19:39·교재/코어 자바스크립트

1. environment 용어 정리

아주 자연스럽고 중요한 고민이에요.
처음에 이 개념은 정말 추상적으로 느껴지기 쉬워요.
지금 힘들다고 느끼는 이유는 용어들이 많고,
그게 언제, 어디서, 어떻게 연결되는지가 감이 안 잡히기 때문이에요.

제가 비유와 쉬운 예시로, 꼭 처음부터 차근차근 설명드릴게요.
🔍 한 문장씩, **“왜 이런 말이 나오는지”**부터 따라가 보죠.


✳️ 용어 정리부터!

먼저 헷갈리는 용어 세 개만 먼저 정리할게요.

용어 쉬운 말로 바꾸면 설명

Lexical Environment “변수 보관 창고” 지금 컨텍스트에서 쓸 수 있는 변수들을 저장해둔 공간
Environment Record “진짜 변수들이 담긴 상자” 변수명이랑 실제 값들이 들어 있는 객체
outerEnvironmentReference “바깥 참조 링크” 한 단계 바깥 컨텍스트의 Lexical Environment를 가리키는 포인터

📚 그럼 이제 문장을 쉽게 해석해볼게요.

“선언될 당시의 Lexical Environment”는 2장에서 소개한 실행 컨텍스트의 구성 요소 중 하나인 outerEnvironmentReference에 해당합니다.

이 말은,

“어떤 함수가 선언될 때, 그 함수는 자기가 만들어질 당시의 변수들(LexicalEnvironment)을 기억해 둡니다. 이 기억은 실행될 때 outerEnvironmentReference라는 이름으로 저장돼요.”

즉,

  • 함수가 선언된 시점의 위치에서 쓸 수 있던 변수들을 기억하고 있음
  • 그래서 나중에 함수가 실행되더라도 그 시점의 변수들에 접근 가능해요

🧠 예시로 이해해볼까요?

function outer() {
  let a = 10;

  function inner() {
    console.log(a);  // ❗️여기서 a를 찾을 수 있는 이유
  }

  return inner;
}

const fn = outer();  // inner를 받아옴
fn();  // 10 출력

🔍 이 코드의 흐름을 보면

  • outer()가 실행되면서 a = 10이 저장됨
  • inner()는 outer() 안에서 선언됐기 때문에,
    → inner()는 선언될 당시의 LexicalEnvironment, 즉 a = 10을 기억함
  • inner()는 a를 스스로 갖고 있지 않지만,
    → outerEnvironmentReference를 통해 바깥(outer)의 환경을 참조함
  • 그래서 inner()가 나중에 호출되더라도 a를 찾을 수 있음

📌 그래서 이 문장이 말하는 핵심은?

“어떤 컨텍스트 A에서 선언한 내부 함수 B는
실행될 때 B의 outerEnvironmentReference를 통해
A의 변수들을 계속 참조할 수 있다.”

반대로,

“A에서는 B의 변수에 접근할 수 없다.
왜냐면 B는 A보다 나중에 실행되는 독립된 환경이기 때문이다.”


🎨 이미지로 요약

[전역 컨텍스트]
   ↓
[outer 실행 컨텍스트]
   - LexicalEnvironment: { a: 10 }
   - 선언: inner()
   ↓
[inner 실행 컨텍스트]
   - LexicalEnvironment: {}
   - outerEnvironmentReference --> outer의 LexicalEnvironment 참조!

🌸 한마디로

함수는 "내가 어디에서 만들어졌는지"를 기억한다.
그래서 실행될 때도 그 기억(outerEnvironmentReference) 덕분에
바깥 변수에 접근할 수 있는 거예요!


이 개념은 굉장히 어려운 편이니까
한 번에 다 이해하려고 하지 않으셔도 괜찮아요.
필요하시면 제가 그림 그려서 다시 설명드릴 수도 있어요 😊

'교재 > 코어 자바스크립트' 카테고리의 다른 글

코어 자바스크립트 | 챕터 7: 클래스  (0) 2025.04.26
코어 자바스크립트 | 챕터 6: 프로토타입  (0) 2025.04.26
코어 자바스크립트 | 챕터 5: 클로저  (1) 2025.04.25
코어 자바스크립트 | 챕터 4: 콜백 함수  (0) 2025.04.24
코어 자바스크립트 | 챕터 3: this  (0) 2025.04.24
'교재/코어 자바스크립트' 카테고리의 다른 글
  • 코어 자바스크립트 | 챕터 7: 클래스
  • 코어 자바스크립트 | 챕터 6: 프로토타입
  • 코어 자바스크립트 | 챕터 5: 클로저
  • 코어 자바스크립트 | 챕터 4: 콜백 함수
피까츄
피까츄
프로그래밍 마스터가 될테야
  • 피까츄
    프로그래밍 마스터
    피까츄
  • 전체
    오늘
    어제
    • 분류 전체보기 (64) N
      • 컴퓨터가 이상해요 모음집 (3)
      • 프로그래밍 (0)
      • 회고 (0)
      • 1학년 (21)
        • 명품 HTML+CSS+JS (10)
        • 쉽게 배우는 C언어 Express (2)
        • R언어 (9)
      • 2학년 (3)
        • C언어로 쉽게 풀어쓴 자료구조 (1)
        • 프로그래밍 언어론 (2)
      • 개인공부 (24) N
        • 백준 (17)
        • 코드트리 JS (6) N
        • 코테 공부 (1) N
      • 교재 (9)
        • 이것이 C++이다 (0)
        • 이것이 JAVA다 (0)
        • 혼자 공부하는 컴퓨터구조 + 운영체제 (1)
        • 혼자 공부하는 데이터통신 (0)
        • 코어 자바스크립트 (8)
      • 유데미 (3)
        • 100일 코딩 챌린지 (3)
  • 블로그 메뉴

    • 방명록
    • 그림블로그
    • 3D 블로그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    작업표시줄클릭안됨
    우분투 설치 오류
    우분투java
    HTML5+CSS3+Javascript 웹 프로그래밍 #연습문제 #이론문제 #실습문제 #풀이 #정답
    윈도우 기능 켜기
    js #자바스크립트_기초
    프로그래밍언어론
    가상현실 설정
    0x80370102오류코드
    the package javax.swing is not accessible
    복습
    우분투C
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
피까츄
코어 자바스크립트 헷갈리는 부분 정리
상단으로

티스토리툴바