hoisting

호이스팅은 자바스크립트에서 함수나 변수를 해당 범위 내 최상위로 끌어올리는 행위라고 합니다. 말로 설명하면 애매하니 코드를 보면 foo라는 변수가 선언되어 있지 않지만 아래 쪽에 선언된 변수값을 인지해 처리합니다. 사실 아래 코드에서는 var를 생략한 경우 foo라는 변수를 전역 변수로 처리하기 때문에 좀 애매하긴 합니다. if문이 없다고 생각하는 것이 좋을듯..

if (true) {
  foo = 2;
  console.log(foo); //2
  var foo;
}

하지만 let을 사용할 경우에는 좀 다릅니다. 변수가 아직 선언되지 않았다고 오류로 처리합니다.

if (true) {
  foo = 2; // Uncaught ReferenceError: foo is not defined
  console.log(foo); //2
  let foo;
}