このコードを検討してください:
function A() {
console.log("first");
}
var f = A;
function A() {
console.log("second");
}
var g = A;
f();
g();
firebug で「first」、「second」を出力します。
ただし、Chrome のコンソールまたは firefox (firebug ではなくファイルから実行する場合) では、「second」、「second」を出力します。
「f」に保持されている参照を変更する必要があるのはなぜですか?
巻き上げが問題のようです(以下のapsillersの回答を参照)。しかし、なぜこの例は正しく機能するのでしょうか (最初から 2 番目に出力することを意味します)。
var A = function A() {
console.log("first");
}
var f = A;
A = function A() {
console.log("second");
}
var g = A;
f();
g();
2番目の関数宣言で「A = ...」を使用したという事実は、この関数の巻き上げをブロックしますか?