[javascript] 식별자 중복 선언 시의 let, const, var 동작 차이

자바스크립트에서 변수를 선언할 때, 식별자를 중복해서 선언할 수 있는데, 이 때 let, const, var의 동작이 어떻게 다른지 알아보겠습니다.

var의 동작

var로 선언된 변수는 중복 선언이 가능하며, 기존의 변수를 덮어씁니다. 이는 호이스팅에 의한 동작으로, 변수가 선언되기 전에 사용될 수 있기 때문입니다.

var x = 10;
var x = 20; // 이 경우, x는 20이 됩니다.

let과 const의 동작

반면에 let과 const로 선언된 변수는 중복 선언이 허용되지 않습니다. 이미 선언된 변수와 동일한 이름의 변수를 다시 선언하면 SyntaxError가 발생합니다.

let y = 10;
let y = 20; // SyntaxError: Identifier 'y' has already been declared

const 역시 동일한 식별자로 재선언이 불가능하며, 재할당도 허용되지 않습니다. 따라서 const로 선언된 변수는 한 번 값을 할당하면 그 값을 변경할 수 없습니다.

결론

let과 const는 중복 선언을 허용하지 않으며, const는 재할당도 허용하지 않습니다. 반면 var는 중복 선언 및 재할당이 모두 가능합니다.

이러한 차이로 인해 var보다는 let과 const의 사용이 권장되며, 특히 const를 사용하여 변경되지 않는 값을 선언하는 것이 좋습니다.

이러한 동작은 ES6에서 도입된 블록 스코프 변수 선언 방식의 변화를 반영한 것입니다.

참고 문헌: