반응형
SMALL
let num = 42
const string = "string"
이처럼 원시값이 변수에 할당될 때, 값 자체를 변수에 할당하는게 아니고, 값의 사본이 생성되어 변수에 저장됨
자바스크립트는 42의 사본을 새로운 메모리 공간을 생성하고, 그 메모리 위치에 대한 참조를 변수 num에 할당합니다.
따라서 num은 42의 메모리 위치를 가리키게 됨
그러나 num자체는 값 42가 포함돼있지 않음
그럼 이 참조되는 원본 42는 어디에 있나?
42라는 리터럴 값을 사용하면, 자바스크립트는 이 리터럴 값을 뜻하는 새로운 값을 메모리에 넣는다.
42라는 이 복사값이 만들어지고, 메모리에 저장됩니다.
변수에는 이 복사값의 참조값을 메모리에 저장한다.
최종적으로 우리는 하나의 원시값을 변수에 할당할 때,
2개의 메모리를 사용하게 됩니다.
- 원시값 그자체를 보관하는 메모리 주소
- 변수가 저장되는 메모리 위치.
- 이 위치에는 원시값이 저장된 메모리 위치를 참조하는 값이 포함
- 메모리에는 변수도 저장되고, 원시값이 저장된 메모리 위치를 참조하는 값 => 2개가 저장
두 번째 말이 헷갈릴 수 있는데 이 뜻은 다시 말하면
- 변수자체(식별자, 예를들어 let x = 10에서 x를 의미)도 별도 메모리 위치에 저장
- 해당 변수는 해당 값이 저장된 메모리 위치를 참조하는 값을 가지고 있음
- 변수에 할당된 원시값이 실제로 저장된 메모리위치를 가리키는 포인터
반응형
LIST
'JavaScript' 카테고리의 다른 글
모던 자바스크립트 - 14(전역변수의 문제점), 15(let, const 키워드와 블록 레벨 스코프) (0) | 2023.03.29 |
---|---|
함수 뒤에 나온 변수를 사용하면 왜 에러가 안날까? (0) | 2023.03.28 |
모던 자바스크립트 - 9(타입 변환, 단축 평가), 10(객체 리터럴), 11(원시값과 객체 비교) (0) | 2023.03.15 |
for loop과 forEach 중에 어떤 것이 더 퍼포먼스가 좋을까? (0) | 2023.03.14 |
자바스크립트에서 var로 선언하면 자동으로 전역객체 window로 등록되니? (0) | 2023.03.09 |