let과 var는 JavaScript에서 변수를 선언하는 데 사용되는 키워드입니다. 그러나 두 키워드는 몇 가지 중요한 차이점이 있습니다.
1. 스코프
let은 블록 스코프를 가지고 있으며, 변수가 선언된 중괄호 {} 블록 내에서만 유효합니다. 반면에 var은 함수 스코프를 가지고 있으며, 변수가 선언된 함수 내에서 유효합니다. var로 선언된 변수는 함수 스코프 내에서만 유효하므로, 블록 스코프를 가진 let과는 다른 동작을 합니다.
2. 호이스팅
var로 선언된 변수는 호이스팅(hoisting)이 발생합니다. 호이스팅은 변수 선언이 스코프의 최상위로 끌어올려지는 동작을 의미합니다. 따라서, 변수 선언 전에 해당 변수를 사용해도 오류가 발생하지 않고 undefined로 값이 초기화됩니다. 반면에 let은 호이스팅이 발생하지 않아 변수 선언 전에 사용하면 ReferenceError가 발생합니다.
3. 중복 선언
let은 같은 스코프 내에서 중복된 변수 선언을 허용하지 않습니다. 동일한 변수 이름으로 let을 사용하여 변수를 재선언하면 SyntaxError가 발생합니다. 하지만 var는 중복된 변수 선언을 허용하고, 기존 변수를 덮어쓰게 됩니다.
4. 전역 변수
let은 전역 변수를 선언할 때 사용하지 않는 것이 좋습니다. let으로 전역 변수를 선언하면 변수가 전역 객체의 프로퍼티로 추가되지 않아서 전역 스코프로부터 격리되게 됩니다. 반면에 var로 선언한 전역 변수는 전역 객체의 프로퍼티로 추가됩니다.
5. 값의 재할당
let과 var 모두 변수에 새로운 값을 재할당할 수 있습니다. 그러나 let으로 선언된 변수는 값을 재할당하기 전에 초기화되지 않았기 때문에 초기화되지 않은 변수에 접근하면 ReferenceError가 발생합니다. var는 초기화되지 않은 변수에 접근하면 undefined를 반환합니다.
let 과 const 를 사용하는 것을 추천
추가적으로, ES6 이전의 JavaScript 버전에서는 var가 주로 사용되었습니다. 하지만 ES6 이후부터는 let과 const를 사용하는 것이 권장되고 있으며, let과 const를 사용하여 변수를 선언하는 것이 더 좋은 프로그래밍 습관입니다. let은 블록 스코프를 가지고 있어서 의도치 않은 변수 누출을 방지하고, const는 상수를 선언하는 데 사용되어 재할당을 방지합니다.