JSでは変数宣言には以下の3つがある
- var
- let
- const
var
var
は再宣言・再代入が可能な変数宣言。
3つの中で一番緩い。
var a = "a";
a = "b"; // ok
var a = "c"; // ok
あと、ホイスティングされる。
console.log(x); // undefined
var x = 10;
上記コードのように、宣言が先に巻き上げられる(実行される)。
初期化がされるわけではないので、undefinedにはなる。
let
let
は再宣言は不可能、再代入は可能な変数宣言。
let a = "a";
a = "b"; // ok
let a = "c"; // NG
宣言前にその変数にアクセスしようとするとエラーになる。
console.log(x); // ReferenceError: x is not defined
let x = 10;
const
const
は再宣言も再代入もできない変数宣言。
ただ、オブジェクトや配列の内容は変更可能。(再宣言でも再代入でもないため)
const a = "a";
a = "b"; // NG
const a = "c"; // NG
const arr = [1, 2, 3];
arr.push(4); // ok
宣言前にその変数にアクセスしようとするとエラーになる。
console.log(x); // ReferenceError: x is not defined
const x = 10;