varとletとconst - JavaScript入門
JavaScriptの変数・定数
JavaScriptにもほかの言語同様に変数と定数があります。
今回は、その変数と定数の宣言方法をみていきます。
変数の宣言はいくつか方法があります。
それらの違いで重要なものとして、再代入と再定義があります。
varとletとconstの比較
再代入と再定義
JavaScriptの変数・定数の宣言方法の違いで、再代入と再定義が重要になってきます。
再代入
再代入可能は、その変数への代入が何度でも許されていることになります。
逆に、再代入不可は、その変数への代入は1度のみとなります。
再定義
再定義可能は、その変数名で複数回の変数定義ができることになります。
逆に、再定義不可は、その変数名での変数定義は一度きりになります。
変数の定義の話はスコープが関わってきますが、ここではスコープについては触れません。
varとletとconst
var
JavaScriptで変数を宣言する方法の一つ目はvar
を使うことです。
var
を使って変数を宣言した場合、再代入可能・再定義可能となります。
var i = 0; i = 2; // 再代入 var i = 2; // 再定義
再定義可能ですので、同じ変数名で二重に定義してしまい、エラーの原因となりやすいので、注意が必要です。
また、var
による宣言には巻き上げという挙動があります。
var 宣言は、現れる場所に関係なく、コードを実行する前に処理されます。これは巻き上げと呼ばれており、後述します。
↑のように書かれています。
コード実行前に処理されることを念頭に置いておく必要があります。
let
JavaScriptで変数を宣言する方法の二つ目はlet
を使うことです。
let
を使って変数を宣言した場合、再代入可能・再定義不可となります。
let i = 0; i = 2; // 再代入 let i = 2; // エラー:再定義
let
では、巻き上げの問題は解消されています。
const
JavaScriptで定数を宣言する方法はconst
を使うことです。
const
を使って変数を宣言した場合、再代入不可・再定義不可となります。
定数ですので、もちろん値の書き換えはできません。(再代入不可)
const i = 0; i = 2; // エラー:再代入 const i = 2; // エラー:再定義
定数は再代入(後からの変更)ができないため、宣言に初期化をすることが必須となります。
定数const
でも、巻き上げの問題は解消されています。
巻き上げについて
一つの例として、forループの中で、setTimeoutしてみます。
このとき、ループ変数をvar
とlet
でそれぞれ宣言してみます。
for(var i = 0; i < 3; i++) { setTimeout(function(){ console.log(i); }); }
var
で宣言した場合、結果として3が三つ表示されます。
for(let i = 0; i < 3; i++) { setTimeout(function(){ console.log(i); }); }
let
で宣言した場合、結果として0と1と2が表示されます。
参考
var - JavaScript | MDN
let - JavaScript | MDN
const - JavaScript | MDN
終わり