var
와 let
의 주요 차이점 중 하나는 변수의 스코프(scope, 범위)이다.function exampleVar() {
if (true) {
var x = 10;
}
console.log(x); // 출력: 10
}
exampleVar();
console.log(x); // 출력: 10
function exampleLet() {
if (true) {
let y = 10;
}
console.log(y); // 에러: y is not defined
}
exampleLet();
console.log(y); // 에러: y is not defined
if
블록 외부에서는 변수 y
에 접근할 수 없다. 함수 내부에서 선언한 변수도 함수 스코프 내에서만 유효하다.let은 변수의 스코프를 블록 스코프로 제한하므로 더 나은 캡슐화를 제공하고 예상치 못한 변수 호이스팅과 관련된 문제를 방지한다. 일반적으로 let을 사용하여 변수를 선언하는 것이 권장된다.
호이스팅이란 변수를 선언하고 초기화했을 때 선언 부분이 최상단으로 끌어올려지는 현상을 의미한다. (초기화 또는 대입 부분은 그대로 남아있다.)
console.log(x); // 출력: undefined
var x = 10;
console.log(x); // 출력: 10
foo(); // 출력: "Hello, World!"
function foo() {
console.log("Hello, World!");
}