var,let,constについて
JavaScript
一覧
| var | let | const | 関数宣言文 |
|---|
| 再宣言 | できる | できない | できない | できる |
| スコープ | 持たない(関数スコープのみ) | 持つ | 持つ | 持たない(関数スコープのみ) |
| ホイスティング | される(初期値はされない) | されない | されない | される(初期値もされる) |
| グローバルオブジェクトへの追加 | される | されない | されない | される |
| 再代入 | できる | できる | できない | される |
一覧の解説
再宣言
var hoge = 'hoge';
var hoge = 'foo';
スコープ
{
var hoge = 'hoge';
let foo = 'foo';
}
function fuga () {
var fugafuga = 'fugafuga';
}
console.log(hoge); // hoge
console.log(foo); // エラー
console.log(fugafuga); // エラー
ホイスティング
console.log(hoge); // エラー
console.log(fuga); // undefined
let hoge = 'hoge';
var fuga = 'fuga';
var fuga;
fuga = 'fuga';
グローバルオブジェクトへの追加
var apple = 'apple';
let banana = 'banana';
console.log(globalThis); // appleプロパティが登録
// bananaはない
再代入
let hoge = 'hoge';
hoge = 'fuga'; // できる
const fuga = 'fuga';
fuga = 'hoge'; // エラー
varと関数宣言文は似ている
console.log(hoge); // undefined
fuga(); // fuga
var hoge = 'hoge';
function fuga () {
console.log('fuga');
}
なぜ関数宣言文の挙動は古いvarに似ているのか
保守性の高いコードを書くために
<script>
'use strict'
</script>
use strictで変わる事
{
function hoge() {
console.log('hoge');
}
}
hoge(); // use strictだとエラーになる
function hoge (a,a,a){}; // ダメ
hoge = 'hoge'; // use strictじゃないとできてしまう