Daily Morning Study

[모던 자바스크립트 DeepDive] 5일차 - 변수2

만발한매화 2025. 7. 3. 10:08
본 문서는 "모던 자바스크림트 DeepDive"를 데일리로 학습하며 기억할 부분과 추가학습한 부분을 공유한다.

 

 

1. 변수선언

  • 변수 선언시 이미 메모리공간에 'undefined'값이 할당된다. => "초기화"(최초 값 할당)
  • 변수 이름은 실행 컨텍스트(execution context)에 등록된다.
    • 실행 컨텍스트란? 엔진이 소스코드 평가, 실행 가능하도록 필요환경 제공. (관리에 도움)
    • 값이 초기화 되지 않으면 쓰레기값(garbage value)가 쌓인다

 

2. 호이스팅 

  • 변수 선언은 런타임이 아닌 이전 단계에서 먼저 실행된다.
    • 변수 선언전에 콘솔을 찍어도 찍힌다. => 단, 할당 전의 undefined가 찍힌다.
    • 할당은 소스코드가 순차적으로 실행되는 런타임에서 실행

 

3. 값 할당

  • 초기화 -> [새로운 메모리 공간 확보] -> 할당 값 저장

 

4. 값 재할당

  • 재할당 불가시 '상수(constant)'라 지칭
  • 재할당 과정 : 초기화 -> [새로운 메모리 공간 확보] -> 최초 할당 -> [새로운 메모리 공간 확보] -> 재할당
  • 쓰레기 값이 쌓이나, JS는 가비지 콜렉터를 내장하고 있어, 메모리누수(memory leak) 방지
    • 언매니지드언어 (C언어) : 개발자가 메모리 관리를 하여야한다.
    • 매니지드언어 (자바스크립트) : 언어차원에서 담당. 단, 언제 지워질지 모름 -> 성능면에서 어느정도 손실 감수

 

5. 식별자

  • 네이밍 규칙 
    • 숫자로 시작 불가
    • 예약어 사용 지양 (strict mode에서는 불가)
    • 한글, 일본어등도 가능하나, 영어 지향
  • 네이밍 컨벤션
    • 카멜 케이스 : 변수, 함수
    • 스네이트 케이스
    • 파스칼 케이스 : 생성자함수(constructor function) - 객체 생성 함수(new), 클래스
    • 헝가리언 케이스 : 변수 타임 또는 목적을 접두어로 붙인다.
      • Ex) var strFirstName, var observable$