タイプ | 再宣言 | 再代入 | スコープ | 初期化 (ホイスティング) |
---|---|---|---|---|
let | × | 〇 | ブロック | × |
const | × | × | ブロック | × |
var | 〇 | 〇 | 関数 | undefined |
「再宣言」varは再宣言できるが、letは再宣言できない
let a = 0;
let a = 0;
コンソール結果↓
Uncaught SyntaxError: Identifier 'a' has already been declared
var b = 0;
var b= 0;
コンソール結果↓
0
「再代入」letは再代入できるが、constは再代入できない
let c = 0;
c = 1;
コンソール結果↓
1
const d = 0;
d = 1;
コンソール結果↓
main.js:22 Uncaught TypeError: Assignment to constant variable.
「ブロックスコープ」 letはスコープの条件が適応されるがvarはスコープの条件は無視される
{
let e = 0;
}
コンソール結果↓
VM70:1 Uncaught ReferenceError: e is not defined
{
var e = 0;
}
コンソール結果↓
0
「ホイスティング」letは宣言前に値を取得するとエラーになるがvarは undefined となる
console.log(h);
let h = 0;
コンソール結果↓
main.js:45 Uncaught ReferenceError: Cannot access 'h' before initialization
console.log(g);
var g = 0;