변수
- 변수는 데이터를 저장하기 위한 임시 기억공간이다.
- 변수 선언: 데이터를 저장할 임시 공간을 메모리에 할당
- 변수는 var, let, const 중 하나의 키워드로 선언될 수 있다.
- 변수 할당 (초기화): 변수에 값을 저장 (메모리의 변수 기억공간에 값을 저장하여 초기화)
- 변수 참조: 변수에 저장된 값을 읽어들이는 것
👉 전역 변수와 지역 변수
- 전역 변수: 전역 공간에서 선언된 함수
- 지역 변수: 전역 공간에서 선언되지 않은 함수 (주로 함수 내에서 선언된 변수를 말함)
- 전역 변수는 코드 어디서든지 참조할 수 있고, 지역 변수는 해당 스코프 내에서만 참조할 수 있다.
- 전역 변수의 경우 변수 이름이 중복될 수 있고, 의도치 않은 재할당에 의한 상태 변화로 코드를 예측하기 어렵게 만들 수 있다.
var, let, const의 차이
👉 스코프
- 스코프란 식별자의 유효범위 (접근할 수 있는 범위)를 말한다.
- var로 선언된 변수의 경우 함수 레벨 스코프를 갖는 반면, let과 const로 선언된 변수는 블록 레벨 스코프를 갖는다.
- 함수 레벨 스코프: 함수를 선언할 때마다 새로운 스코프를 생성하며, 함수 내에서 선언한 변수는 그 함수 내에서만 유효하고, 함수 외부에서는 참조할 수 없다.
- 블록 레벨 스코프: 코드 블록 내에서 선언된 변수는 그 코드 블록 내에서만 유효하고, 블록 외부에서는 참조할 수 없다.
👉 호이스팅
- var, let, const로 선언된 변수 모두 호이스팅의 대상이다.
- 변수의 선언문과 할당문을 나누어 선언문만 해당 스코프의 최상단에 옮겨진 것처럼 동작한다.
- var로 선언된 변수는 호이스팅 시 undefined로 초기화되어, 만약 값을 할당하기 전에 변수를 참조하면 undefined를 반환한다.
- let이나 const로 선언된 변수는 호이스팅 시 초기화되지 않는다.
- 이때 let이나 const로 선언된 변수는 선언된 시점부터 초기화되기 전까지 변수를 참조할 수 없는 일시적 사각 지대 (
TDZ
)에 있게 된다.
- 만약 초기화되기 전 변수를 참조하면 참조에러가 발생한다.
👉 재할당 및 중복 선언
- var로 선언된 변수는 재할당과 중복 선언 모두 가능하다.
- let으로 선언된 변수는 재할당은 되지만, 중복 선언은 불가하다.
- const로 선언된 변수는 재할당과 중복 선언 모두 불가하다.
참고
var, let, const의 차이 ⏤ 변수 선언 및 할당, 호이스팅, 스코프