私の歴史と今

振り返ると恥ずかしくなるのが私の歴史。だけどそのときは真面目に書いていた訳でね。そんな今の私を書いていく。

JavaScript 第5版 4.3 変数のスコープ

変数 スコープ
グローバル変数 プログラム全体
ローカル変数 関数(!)内

4.3.1 ブロックレベルのスコープはない

    • ブロックレベルのスコープがない!!!(Javaにはある)
    • ローカル変数は関数全体で有効!!
    • から、関数の最初で宣言しましょう!!
var hoge = 'hoge';
function showHoge(){
  alert(hoge);           // 'undefined'。次行のローカル変数hogeは関数全体で有効だから。
  var hoge = 'hogehoge'; // 関数全体で有効
  alert(hoge);           // 'hogehoge'。初期化されているから。
}
showHoge();

下記変数iは、forブロック外でも参照可能。for文の前でも変数は有効(初期化はされていないけど)。

alert(i); // エラーにならず、「undefined」が出力される。
for(var i = 0; i < 1; i++){
  alert(i);
}
alert(i); // undefinedにならず、「1」が出力される。

4.3.2 未定義と未代入

alert(x); // 未定義なのでエラーが発生する
var x;
alert(x); // 未代入なのでundefinedが表示される。