web関連
【javascript】ブロックスコープでの変数宣言「var」と「let」の違い
if文やfor文などで使われる「{}(波括弧)」はブロックスコープと呼ばれるもので、varを使った時とletを使った時の違いについての備忘録
ブロックスコープとは
es6(ES2015)から追加された概念
varを使って変数を宣言するなら無視してok
letやconstを使うことでブロックスコープ(ローカルスコープ)として機能する
以下、具体例
for文(ブロックスコープ)を使った例
varを使った場合
for (var i = 0; i < 5; i++) {
console.log(i); // -> 0, 1, 2, 3, 4
}
console.log(i);// 5
ブロックスコープ外で変数にアクセスできてしまう
letを使った場合
for (let i = 0; i < 5; i++) {
console.log(i); // -> 0, 1, 2, 3, 4
}
console.log(i);// Uncaught ReferenceError: i is not defined
ブロックスコープ外ではアクセスできない
if文を使った例
varを使った場合
var boolean = true;
if(boolean){
var a = 'block';
}
console.log(a);// 出力:block
letを使った場合
var boolean = true;
if(boolean){
let a = 'block';// ブロックスコープとして宣言
}
console.log(a);// Uncaught ReferenceError: a is not defined
まとめ
{}(波括弧)で囲まれた(※function(){…}を除く)ものはletやconstで変数を宣言することでブロックスコープ(ローカルスコープ)として機能をする
要はブロックスコープとはvarを使うなら無視してもよいものだが、letやconstを使うのであれば理解していないと思わぬエラーにあうから注意したほうがいい概念