varのデメリット
- 同一スコープで同一名の変数を宣言できる
- 変数の巻き上げによる上書き
1. 同一スコープで同一名の変数を宣言できる
OK
var x = 10; var x = 20; // OK
let
は NG
let y = 10; let y = 20; // SyntaxError: Identifier 'y' has already been declared
const
は NG
const z = 10; const z = 20; // Syntax Error Identifier 'z' has already been declared
2. 変数の巻き上げによる上書き
関数内部でグローバルスコープと同一の変数名を定義すると、 関数内部において、変数が巻き上げられて使用される。
var x = 10; function test () { console.log(x) // 20 x = 20 } console.log(x) // 10