#参照可能な範囲
##var/let/constをつけて変数を宣言した場合
関数の内で宣言された変数を参照可能な範囲はブロック内。
関数の外で宣言された変数を参照可能な範囲はファイル内。
##var/let/constを付けずに変数を宣言した場合
関数の内だろうと外だろうと宣言された変数を参照可能な範囲はファイル内。
#寿命
varで宣言された変数はブロックによる寿命が無い。(っえ!?)
つまり、ブロック内で生まれた変数はプログラムがブロックを抜けた後も生き続ける。
if (true){
var num = 83;
}
console.log(num);
$ nodejs test.js
83
一方でletやconstを使ってブロック内で生まれた変数はブロック抜けた後に開放される。
varを使用している場合にはブロックの処理を無名関数に入れてその関数をcall(this)する方法で上記の動作を回避できる。(左記の方法はおそらく参照不可能になっているだけ。)