次のコードがあります。関数を宣言し、その後に関数と同じ名前の変数を宣言します。
function a(x) {
return x * 2;
}
var a;
alert(a);
これがアラートundefined
になると思っていましたが、実行すると、アラートに次のように表示されます。
関数 a(x) {
x * 2 を返す
}
変数に値を代入すると ( のようにvar a = 4
)、アラートにはその値 ( 4
) が表示されますが、この変更a
がなければ関数として認識されます。
なぜこうなった?