Block Scope

let과 var의 또 다른 차이점은 Scope이다.

var은 Function Scope로 function 외부에서는 내부의 변수에 접근이 불가능하다.

// var은 function 외부에서 접근 불가능

function a() {
  var name = "Tom";
}
console.log(name);

Uncaught ReferenceError: name is not defined


하지만 let과 const는 Block Scope로 if, try, catch 등의 block의 외부에서도 접근이 불가능하다.

// var은 block외부에서도 접근 가능

if (true) {
  var name = "Tom";
}
console.log(name);

Tom

// let은 block외부에서 접근 불가능

if (true) {
  let name = "Tom";
}
console.log(name);

Uncaught ReferenceError: name is not defined