
スポンサーリンク
varは関数スコープで再宣言・再代入が可能で、letはブロックスコープで再宣言が不可ですが、再代入は可能です。
constはブロックスコープで再宣言・再代入いずれもできません。
var,let,constの違い
各違いを表でまとめると以下の通りです。
種類 | 概要 | スコープ | 再宣言 | 再代入 |
---|---|---|---|---|
var | ローカル変数を定義する | 関数 | 〇 | 〇 |
let | ローカル変数を定義する | ブロック | × | 〇 |
const | 定数を定義する | ブロック | × | × |
var変数
- JavaScriptで宣言できるローカル変数
- 宣言された関数内で利用できる(ブロック外から参照可能)
- 再宣言・再代入ともに可能
var再宣言(実行コード)
以下再宣言の確認コードです。
var hoge = 1;var hoge = 2; // 再宣言できるconsole.log(hoge);
var再宣言(実行結果)
再宣言した値が表示されることを確認できました。
2
var再代入(実行コード)
以下再代入の確認コードです。
var hoge = 1;hoge = 3; // 再代入できるconsole.log(hoge);
var再代入(実行結果)
再代入した値が表示されることを確認できました。
3
varスコープ(実行コード)
以下関数スコープの確認コードです。
if (true) { var num = 100; console.log("ブロック内:" + num);}// ブロック外から参照可能console.log("ブロック外:" + num);
varスコープ確認(実行結果)
ブロック外から値が参照できることが確認できました。
ブロック内:100ブロック外:100
let変数
- JavaScriptで宣言できるローカル変数
- 宣言されたブロック
{ }
内でのみ利用できる - 再宣言は不可であるが、再代入は可能
let再宣言(実行コード)
以下再宣言の確認コードです。
let hoge = 1;let hoge = 2; // 再宣言不可console.log(hoge);
let再宣言(実行結果)
再宣言がエラーとなることを確認できました。
let hoge = 2; // 再宣言不可 ^
SyntaxError: Identifier 'hoge' has already been declared
let再代入(実行コード)
以下再代入の確認コードです。
let hoge = 1;hoge = 3; // 再代入できるconsole.log(hoge);
let再代入(実行結果)
再代入できることを確認できました。
3
letスコープ(実行コード)
以下ブロックスコープの確認コードです。
if (true) { let num = '100'; console.log(num);}// ブロック外からは参照不可console.log(num);
letスコープ(実行結果)
ブロック外から値が参照できないことを確認できました。
console.log(num); ^
ReferenceError: num is not defined
const定数
- JavaScriptで宣言できる定数
- 宣言されたブロック
{ }
内でのみ利用できる - 再宣言・再代入ともに不可
const再宣言(実行コード)
以下再宣言の確認コードです。
const hoge = 1;const hoge = 2; // 再宣言は不可
const再宣言(実行結果)
再宣言がエラーとなることを確認できました。
const hoge = 2; // 再宣言は不可 ^
SyntaxError: Identifier 'hoge' has already been declared
const再代入(実行コード)
以下再代入の確認コードです。
const hoge = 1;hoge = 3; // 再代入は不可
const再代入(実行結果)
再代入がエラーとなることを確認できました。
hoge = 3; // 再代入は不可 ^
TypeError: Assignment to constant variable.
constスコープ確認(実行コード)
以下ブロックスコープの確認コードです。
if (true) { const num = '100'; console.log(num);}// ブロック外からは参照不可console.log(num);
constスコープ確認(実行結果)
ブロック外から値が参照できないことを確認できました。
console.log(num); ^
ReferenceError: num is not defined
まとめ
- スコープ・再宣言・再代入の自由度は
var > let > const
となる。 var
の再宣言や関数スコープは、意図しないバグを引き起こす場合があるため、基本的にはlet
の利用が推奨される。
以上で本記事の解説を終わります。
よいITライフを!