변수
- 이 메모리 공간에는 변수의 값 또는 참조가 저장됩니다.
- 변수 이름은 해당 메모리 공간을 가리키고(참조하고), 이를 통해 자바스크립트 엔진이 메모리 공간에 저장된 값을 읽거나 수정할 수 있습니다.
변수 선언
변수 초기화
변수 할당
원시타입(Primitive Types)
stored directly in the "Stack", where it is accessed from
💡
스택에 값이 직접 저장되며, 스택에서 접근 가능하다.
객체 타입(Reference Types)
Stored in the heap and accessed by reference
💡
힙에 저장되며 참조를 통해 접근 할 수 있다.
- 몸이 작으면 stack에 바로 몸이 크면 다른 동네(heap)로 보내고 찾는 사람이 있으면 그 동네 찾아가는 주소를 줌
let vs const vs var
ㅤ | let | const | var |
도입시기 | ES6 | ES6 | ES5 |
스코프 | 블록스코프 | 블록스코프 | 함수 스코프 |
초기화 이전에 참조 가능 여부 | X | X | O |
재할당 | O | X | O |
초기화 이전에 참조 가능 여부
var
- 선언과 초기화가 분리되어 있기 때문에, 변수를 선언하기 전에도 접근이 가능하며
undefined
로 초기화됩니다.
let
, const
- TDZ이 적용되어 초기화 전에 변수에 접근하려고 하면 에러가 발생합니다.
- TDZ(Temporal Dead Zone): 변수가 선언되고 초기화되기 전까지의 영역
재할당
const
- 객체나 배열과 같은 참조형 데이터 타입의 경우, 객체의 속성이나 배열의 요소는 수정 가능
var 더이상 쓰면 안되는 이유
💡
중복 선언 가능, let, const와 호이스팅, 스코프 동작 과정도 달라서 예상치 못한 결과가 나올 수 있어 사용하지 않는 것이 좋습니다.
- var 다른 키워드와의 차이점
- 함수 스코프
- 변수가 선언되기 전에도 참조될 수 있음