// 識別子 a function a() { // 関数を宣言します。識別子も
}
alert(typeof a);
は、優先度である「関数」を表示します。 function var よりも高いレベル。
これが、コードが順番に実行される、つまり、後で実行される関数によって a が上書きされる理由であると考える人もいます。わかりました、交換してください。
function a() {
}
var a;
alert(typeof a);
結果には、「未定義」ではなく「関数」が表示されます。つまり、関数宣言は変数宣言よりも優先されます。
コードを少し変更して、宣言時に値を割り当てます。
function a() {
}
var a = 1; // ここで注意してください
alert(typeof a);
このとき、「関数」は表示されません。
function a() {
}
var a;
a = 1; // ここで、
alert(typeof a);
は、「var a = 1」が 2 つのステップに分割されることを意味します。 a は再割り当てされており、当然、それが最後の値になります。