-
スコープの違い:
- let: ブロックスコープを持つ変数を宣言するためのキーワードです。ブロックスコープは、if文やforループなどの中括弧で囲まれた範囲内でのみ変数が有効です。ブロックスコープ外では、その変数にはアクセスできません。
- var: 関数スコープを持つ変数を宣言するためのキーワードです。関数内で宣言された変数は、その関数内のどこからでもアクセスできます。ブロックスコープは持たず、ブロック内で宣言された変数も関数内のどこからでもアクセス可能です。
-
変数の巻き上げ(Hoisting)の違い:
- let: letキーワードで宣言された変数は、宣言されるまで一時的に"TDZ (Temporal Dead Zone)"と呼ばれる状態になります。TDZ内では、その変数にはアクセスできず、参照エラーが発生します。変数は宣言された位置で初期化されます。
- var: varキーワードで宣言された変数は、変数が宣言される前でも参照できます。変数の宣言はコード内での位置に関係なく、関数またはスクリプトの先頭で巻き上げられます。宣言前の変数はundefinedとして扱われます。
以下に、letとvarの使用例を示します。
// ブロックスコープの例
function example1() {
if (true) {
let x = 10;
var y = 20;
console.log(x); // 10
console.log(y); // 20
}
console.log(x); // ReferenceError: x is not defined
console.log(y); // 20
}
// TDZの例
function example2() {
console.log(x); // ReferenceError: x is not defined
let x = 10;
}
// 変数の巻き上げの例
function example3() {
console.log(x); // undefined
var x = 10;
console.log(x); // 10
}
このように、letとvarの違いはスコープと変数の巻き上げの挙動に現れます。プログラムの要件に応じて、適切なキーワードを使用して変数を宣言することが重要です。