JavaScriptのブロックスコープ


まず、下記のコードを見て下さい。変数iの値は何になると思うでしょうか。


for(var i=0;i<10;i++){
//...
};
console.log(i); //iは宣言されていないのでエラー?

Javaや他の言語に慣れている方はエラー(iは宣言されていない変数)と思うでしょうが、JavaScriptでは違います。実際に動かしてみると分かるのですが、「iは10」と表示されてしまいます。

 


for(var i=0;i<10;i++){
//...
};
console.log(i); //10

これはJavaScriptには元々ブロックスコープ({ }内で宣言した変数は{ }内でしか使えない)という仕様がなかったためです。ただ、JavaScript1.7からはブロックスコープ内でしか使えない変数宣言「let」が追加されています。
こちらのコードを実行してみると。


for(let j=0;j<10;j++){
//...
};
console.log(j); //undefined

期待通り「j」はundefinedとなり、ブロックの外では使えないようになっていますね。

letで宣言する方法はあまりメジャーで無いみたいですが・・・for文やif文の中など部分的につかっていくのはありかもしれませんね。