14.1Hoisting / About

巻き上げ(Hoisting)

`var`宣言は巻き上げられますが、代入は巻き上げられません。`const`と`let`にはTemporal Dead Zone (TDZ)という新しい概念があり、宣言前にアクセスすると`ReferenceError`がスローされます。

巻き上げとは、`var`宣言や関数宣言が、そのスコープの先頭に「引き上げられて」解釈されるJavaScriptの挙動です。これにより、`var`変数は宣言前に `undefined` として存在します。`let` と `const` は巻き上げられますが、初期化されるまではTDZにあり、アクセスがブロックされます。このTDZの仕組みにより、`var`よりも安全で予測しやすいコードが書けます。

❌ Bad
// using const and let
function example() {
  console.log(declaredButNotAssigned); // => throws a ReferenceError
  const declaredButNotAssigned = true;
}
✅ Good
// the interpreter is hoisting the variable declaration (for var)
function example() {
  let declaredButNotAssigned;
  console.log(declaredButNotAssigned); // => undefined
  declaredButNotAssigned = true;
}