변수(variable)
- 확보한 메모리 공간을 식별하기 위해 지어진 고유한 이름
변수가 값을 읽는 원리
- 변수는 값이 아닌 값을 담고 있는 메모리 주소를 가리키고 메모리 주소를 통해 값을 참조한다.
메모리 셀(memory cell)
- 하나의 메모리 셀 크기는 1Byte(8Bit)이다. 메모리 셀의 집합을 메모리라고 한다.
식별자(identifier)
- 메모리에 존재하는 값들을 구분하기 위해 메모리 주소에 붙인 고유한 이름을 식별자라고 함.
실행 컨텍스트(execution context)
- 모든 식별자는 실행 컨텍스트에 등록됨
변수와 식별자의 차이점?
변수는 식별자이지만 식별자는 변수, 함수(자바스크립트에서 값), 클래스(?) 등 모든 값들을 구분할 수 있는 모든 이름을 말하는 게 아닐까?
변수 선언
- 선언 되는 시점
- 모든 변수 선언은 자바스크립트가 실행되기 전에 진행된다. 한 줄 한 줄씩 바이트 단위로 자바스크립트가 실행되기 전에 식별자를 통해 메모리 공간을 미리 확보하는 준비 단계
- var 변수의 특이점
- var 변수는 선언과 동시에 확보한 메모리 공간에 undefined라는 원시 값을 넣어 혹시나 있을 다른 값들을 초기화한다.
값의 재할당
- 값을 할당하는 방식
- 자바스크립트는 특이하게도 처음에 선언한 메모리 공간에 값을 재할당 하는 것이 아니라 다른 메모리 공간을 새로 확보한 후 값을 할당한다.
- 그럼 이전의 메모리 공간은 어떻게 되는가?
- 값의 재할당으로 더 이상 참조 되지 않는 메모리 값들은 가비지 컬렉터가 관리함으로써 메모리 누수를 방지한다.
- 모든 언어에 가비지 콜렉터가 존재하는가?
- 자바스크립트는 가비지 컬렉터가 존재하는 매니지드 언어이고 그와 다르게 c언어는 사용자가 직접 사용하지 않는 메모리를 해제해야 되는 언매니지드 언어이다.
예약어(reserved word)
- 프로그래밍 언어 자체에서 이미 사용되고 있는 고유한 단어
의문점❓
- var를 제외한 다른 변수 선언 키워드는 undefined로 초기화하지 않는다면 어떻게 확보한 메모리 공간이 다른 값들이 없다는 것을 확신할까? 가비지 컬렉터가 초기부터 존재하지 않고 let 과 const 변수가 나오는 시점에 같이 나오면서 메모리 관리가 되었기 때문에 undefined로 초기화하지 않는 것이 아닐까?
- let, const 같은 키워드는 선언될 때 사용 가능한 메모리 공간만 확보?
- 키워드와 예약어가 비슷해 보이는데 어떤 차이점이 있을까?
'메타 스터디 > JavaScript' 카테고리의 다른 글
제어문(control flow statement) (0) | 2022.05.10 |
---|---|
연산자 (0) | 2022.05.07 |
데이터 타입 (0) | 2022.05.07 |
표현식과 문 (0) | 2022.05.03 |
자바스크립트란? (0) | 2022.04.29 |
댓글