let・var・constの違いJavaScriptには変数を宣言する方法として、var・let・constの3つがあります。
どれも似ているように見えますが、挙動や使いどころが大きく異なります。
この記事では、それぞれの違いと実務での使い分けをわかりやすく解説します。
| let | var | const | |
|---|---|---|---|
| 再宣言 | 不可 | 可 | 不可 |
| 再代入 | 可 | 可 | 不可 |
| スコープ | ブロック | 関数 | ブロック |
| 繰り返し構文 | 可 | 可 | 不可 |
varは関数スコープを持ちます。
if (true) {
var a = 10;
}
console.log(a); // 10(外から見えてしまう)
ブロックを抜けても変数が使えてしまうため、意図しないバグの原因になります。
var a = 10;
var a = 20;
console.log(a); // 20
同じ変数名で上書きされるため、バグに気づきにくいです。
現在では、varは基本的に使わず、letかconstを使うのが一般的です。
if (true) {
let b = 10;
}
console.log(b); // エラー
ブロック内でのみ有効なので、安全に変数を扱えます。
let count = 0;
count = 1; // OK
値が変わる変数に適しています。
let x = 10;
let x = 20; // エラー
const pi = 3.14;
pi = 3.1415; // エラー
const user = { name: "Taro" };
user.name = "Jiro"; // OK
「中身」は変更可能という点は重要です。
const a; // エラー
for (let i = 0; i < 3; i++) {
console.log(i);
}
for (var i = 0; i < 3; i++) {}
console.log(i); // 3(外でも使えてしまう)
for (const i = 0; i < 3; i++) {} // エラー
※ただし for...of などでは使用可能
for (const item of [1, 2, 3]) {
console.log(item);
}
const API_URL = "https://example.com"; // const
let count = 0; // let(変わる)
const arr = [1, 2];
arr.push(3); // OK
if (true) {
var test = 1;
}
console.log(test); // 出てしまう
varは古い書き方で基本使わないletは再代入可能な変数constは再代入不可(基本これを使う)