JavaScriptのループ その3

2015年7月6日月曜日

JavaScript

[その1]では以下のようなループで変数iのスコープで関数全体になってしまうと書いた。
これはJavaScriptでは変数にブロックスコープがなく、var変数はどこで宣言しても関数の先頭で宣言したのと同じように扱われてしまうからだ。
※ちなみに変数宣言が関数の先頭に移動してしまう挙動をホイスティング(巻き上げ)と呼ぶ。
for (var i = 0; i < 5; i++) {
    ...
}
print(i);
出力結果は以下となる。

5

ECMAScript6をサポートしている環境ではvarではなくletキーワードが使える。
for (let i = 0; i < 5; i++) {
   ...
}
print(i);
let変数はブロック変数となるため、出力結果は以下となる。

ReferenceError: i is not defined