JavaScript에서 변수를 선언하는 방법은 3가지이다.
초기에 변수 선언자 var
를 사용하여 변수를 선언하였으나,
몇가지 문제를 보완하고자 let
과 const
가 도입되었다.
(참고로, JavaScript는 데이터 타입에 상관없이 동일한 변수 선언자를 사용할 수 있다.)
차이점 | var | let | const |
---|---|---|---|
중복 선언 | O | X | X |
재할당 | O | O | X |
유효 범위 | function | block | block |
호이스팅 시 초기화 | O | X | X |
전역객체 property | O | X | X |
Hoisting
: 변수 선언이 끌어올려짐
→ 코드가 작성된 순서대로 실행되지 않고, 프로그램 앞단에서 변수 선언이 먼저 실행됨
변수 중복 선언 가능 → 마지막으로 할당된 값이 변수에 저장됨
function scope
: 함수 내부에서 선언된 변수만 지역변수로 한정하며, 나머지는 모두 전역변수로 취급
Hoisting
: 코드 실행 전에 자바스크립트 엔진이 미리 변수를 선언하고, undefined
로 초기화
→ 변수 선언 전에 사용 가능
선언 생략 가능
전역객체인 window
의 프로퍼티로 할당됨
var x = 1;
var x = 2; // 중복 선언 가능
x = 3; // 재할당 가능
y = 1; // 선언 생략 가능
x += z; // 선언 전 사용 가능
console.log(z); // undefined
console.log(x); // NaN
var z = 3;
console.log(window.z); // 3
block scope
: 중괄호{ }로 둘러싸인 코드 영역에서 선언 시 지역 변수
Hoisting
: 변수 선언만 해두며, 초기화는 코드 실행 과정에서 변수 초기화문을 만났을 때 수행
(호이스팅이 발생하지만, 값을 참조할 수 없어서 호이스팅이 발생하지 않는 것처럼 보임)
→ 변수 선언 전에 사용 시 ReferenceError 발생
let x = 1;
x = 2; // 재할당 가능
let x = 3; // 중복 선언 SyntaxError
console.log(y); // 호이스팅 ReferenceError
let y = 3;
재할당 시 TypeError 발생
→ 다만, 할당된 값이 객체나 배열일 경우, 메소드로 값 변경 가능
선언 시 초기화를 하지 않으면 SyntaxError 발생
block scope
: 중괄호{ }로 둘러싸인 코드 영역에서 선언 시 지역 변수
Hoisting
: 변수 선언만 해두며, 초기화는 코드 실행 과정에서 변수 선언문을 만났을 때 수행
(호이스팅이 발생하지만, 값을 참조할 수 없어서 호이스팅이 발생하지 않는 것처럼 보임)
→ 변수 선언 전에 사용 시 ReferenceError 발생
const C = 1;
C = 2; // 재할당 TypeError
const S; // 초기화 생략 SyntaxError
console.log(T); // 호이스팅 ReferenceError
const T = 3;
결론
1. const를 우선적으로 사용
2. let은 값을 재할당 해야하는 경우 사용
3. var은 더이상 사용하지 않음