메모리 : 데이터를 저장할 수 있는 메모리셀(1Byte=8bit)의 집합
컴퓨터는 1Byte(메모리셀)단위로 데이터를 저장,읽음
메모리셀은 각각 고유한 메모리 주소를 갖음
메모리 주소는 메모리 상황에 따라 임의로 결정 -> 항상 다르다
메모리 주소를 통한 직접적인 접근은 위험,JS에서 허용X
변수 : 어떤 값을 저장하기 위해 확보한 메모리 공간을 가르키는 말
변수는 인터프리터에 의해 메모리 공간 주소로 치환되어 실행
식별자(변수명, 함수명, 클래스명) : 어떤 값을 구별하고 식별할 수 있는 고유한 이름, 값이 저장된 메모리 주소를 기억, 메모리 상에 존재하는 어떤 값을 식별할 수 있는 이름
선언을 통해 JS 엔진에 식별자의 존재를 알림
키워드 : JS 엔진이 수행할 동작을 나타내는 명령어
1. 선언 단계: 변수 이름을 실행 컨텍스트에 등록(변수이름=key / 값=value 객체 형태로)
모든 식별자는 실행 컨텍스트에 등록
2. 초기화 단계: 값을 저장하기 위한 메모리 공간 확보, 암묵적으로 undefined 할당
var 키워드는 선언 단계,초기화 단계 동시에 진행
초기화 하지 않고 선언한 변수를 참조 시 이전에 있던 쓰레기값이 나올 수도
ReferenceError: 참조하려는 식별자가 JS엔진에 등록되어 있지 않을 때 발생
변수 호이스팅 : 변수 선언문이 코드의 맨 윗부분에 작성된 것처럼 동작하는 JS고유의 특징
모든 선언은 소스코드가 한줄 한줄 실행되는 런타임 이전에 먼저 실행됨
| 변수 선언, 값 할당 | 단축 표현 |
|---|---|
| var score; score = 100; |
var score = 100; |
변수 선언은 런타임 이전, 값의 할당은 런타임에 실행

변수 할당 시 새로운 메모리 공간을 확보하여 저장

0x000000F2, 0x00001332 는 필요가 없어짐
이런 불필요한 값들은 가비지 콜렉터에 의해 메모리에서 자동 해제
가비지 콜렉터 : 메모리 공간을 주기적으로 검사해 불필요한(어떤 식별자도 참조하지 않는) 메모리를 해제
JS는 가비지 콜렉터를 내장한 매니지드 언어(메모리 관리를 알아서)
문자,숫자,_,$ 가능
숫자 맨앞은 X
예약어 불가
대소문자 구별
변수, 함수 : 카멜케이스 (camelCase)
생성자 함수, 클래스 이름 : 파스칼 케이스 (PascalCase)