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を使うのであれば理解していないと思わぬエラーにあうから注意したほうがいい概念