3

このコードを検討してください:

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 = ...」を使用したという事実は、この関数の巻き上げをブロックしますか?

4

1 に答える 1