ES6のfor...of文で変数のlet宣言は必要か

結論:JSは関数スコープであってブロックスコープは無いので必要
app1.js (悪い例)

var array = [1,2,3];
for(a of array){
  console.log(a);
}
console.log(a);
$ node app1.js
1
2
3
3 #=>aがトップスコープで見えてる

app2.js(安全な例)

"use strict";

let array = [1,2,3];
for(let a of array){
  console.log(a);
}
console.log(a);
$ node app2.js
1
2
3
app2.js:7
console.log(a); #=>aが見えないので実行時エラー
...