JavaScript Tips: const、let、var の比較
By JoeVu, at: 2023年11月25日18:33
Estimated Reading Time: __READING_TIME__ minutes
JavaScriptにおいて、let、const、varは変数を宣言するために使用されますが、スコープ、ホイスティング、および変更可能性の点でいくつかの違いがあります。
-
var(変数宣言):
varで宣言された変数は関数スコープを持ち、そのスコープはその変数が定義されている関数に限定されます。
var変数は実行フェーズ中にそのスコープの先頭にホイスティングされます。つまり、コード内で宣言される前に変数を使用できます。
var変数は再宣言および再代入できます。
function variable_declaration() {
var x = 10;
if (true) {
var x = 20; // 上記と同じ変数であり、新しい変数ではありません
console.log(x); // 20を出力
}
console.log(x); // 10ではなく20を出力
} -
let(ブロックスコープ宣言):
letで宣言された変数はブロックスコープを持ち、そのスコープはその変数が定義されているブロック(波括弧のペア)に限定されます。
let変数もホイスティングされますが、インタープリターがコード内の宣言に到達するまで初期化されません。
let変数は再代入できますが、同じスコープ内で再宣言することはできません。
function variable_declaration() {
let x = 10;
if (true) {
let x = 20; // ブロック外の変数とは異なる変数
console.log(x); // 20を出力
}
console.log(x); // 内部ブロックの影響を受けず、10を出力
} -
const(定数宣言):
constで宣言された変数はletのようにブロックスコープを持ちます。
const変数は宣言時に値を割り当てる必要があり、その値を変更または再代入することはできません。
letと同様に、const変数は宣言されるまでホイスティングされません。
function variable_declaration() {
const x = 10;
// x = 20; // これはエラーになります。const変数は再代入できません
console.log(x); // 10を出力
}
一般的に、デフォルトでconstを使用し、変数の値が変更されるとわかっている場合にのみletを使用するのが良い習慣です。varは、その関数スコープの動作とホイスティングの癖のために、現代のJavaScriptではあまり頻繁に使用されません。constとletを使用すると、意図しない再代入を防ぎ、コードの可読性を向上させることができます。