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