変数宣言 var,let,constの違い
再代入・再宣言
var
再宣言、再代入可能
let
再代入のみ可能
const
再宣言、再代入どちらも不可
スコープ
グローバルスコープ
トップレベルで宣言すると、
var,let,constは、グローバルスコープを持つ。
※グローバルスコープ:どこからでもアクセスできるよ!
ブロックスコープ
javascript
const a = 0;
if(true){
const a = 1;
const b = 2;
console.log(a);
}
console.log(a);
console.log(b);
結果:
1
0
ReferenceError: b is not defined
if文の中では、
a=1, b=2が定義されている。
a=1, b=2はif文の{}ブロックの中でのみ有効だよ!ということ。
そのため、
最後のconsole.log(a);は、最初に定義したconst a = 0;の値を出力する。
最後のconsole.log(b);は、bなんて定義されてないよ!とおこられる。
typescript
const a = 0;
if(true){
const a = 1;
const b = 2;
console.log(a);
}
console.log(a);
console.log(b);
結果:コンパイルエラー
bなんてないからダメだよ!実行すらさせないよ!となる。
バグがある状態で、実行してしまうjavascriptと、
バグがある状態では、実行すらさせないよのtypescript。
まとめ
var
再宣言、再代入可能、スコープもなんでもあり→なんでもありすぎて使わない(バグを生みやすい)
let
再代入のみ可能、ブロックスコープ→再代入できるため、バグを生みやすい(どうしてもしょうがない場合は使う、程度)
const
再宣言、再代入どちらも不可、ブロックスコープ→制限が多い、そのためバグを生みづらい
0 件のコメント:
コメントを投稿