JavaScript/이론
[Javascript] var, let, const
sirius
2021. 3. 16. 10:44
1. var(Fuction-Scope)
es2015 전까지 변수를 선언하던 방식
for(var i=0; i < 10; i++) {
console.log("i -> " + i);
}
console.log("for out i -> " + i);
다른 언어에서는 함수 바깥에서 i를 호출했기 때문에 오류가 발생하지만,
Javascript에서는 for문 안에서 선언된 변수 i가 호이스팅 되었기 때문에 결과가 출력됨
var test = 'test1';
var test = 'test2';
console.log(test);
test2 = 'test3';
var test2;
console.log(test2);
문제점
- 1. 중복된 변수를 선언해도 문제가 발생하지 않음
- 2. 초기화 한 후에 변수를 선언해도 호이스팅 때문에 정상적으로 프로그램이 동작함
- 3. 초기화와 선언이 순서가 바뀌더라도 정상적으로 동작
2. let, const(Block-Scoped)
var의 문제점을 해결하기 위해 es2015에 추가
for(let i=0; i < 10; i++) {
console.log("i -> " + i);
}
console.log("for out i -> " + i); // i is not defined 발생
let test = 'test1';
test = 'test11' // 새로 초기화 가능
let test = 'test2';// 새로 선언하는 것은 에러 발생
let과 const는 변수 재선언을 할 수 없음
let은 변수에 재할당이 가능하지만, const는 변수를 재선언할 수 없고, 재할당 할 수 없음
const test1 = 'const';
test1 = 'const1'; //Assignment to constant variable 발생
const test2; //Missing initializer in const declaration
let과 const가 호이스팅이 발생하지 하지 않는 것은 아니지만
var는 Function-Scope로 호이스팅이 발생했다면
let, const는 Block-Scope로 호이스팅이 발생