Warum wird eine Funktionsdeklaration in einem Bedingungsblock für den Funktionsumfang in Chrome, nicht jedoch in Firefox, aktiviert?
Warum geben die folgenden Codes unterschiedliche Ergebnisse zwischen Chrome und Firefox aus?
f = function() {return true;};
g = function() {return false;};
(function() {
if (g() && [] == ![]) {
f = function f() {return false;};
function g() {return true;}
}
})();
console.log(f());
In Chrome: Das Ergebnis istfalse
. In Firefox ist dies jedoch der Falltrue
.
Die Schlüsselzeile der obigen Codes ist Zeile 4 und basiert auf meinem Wissen über das Heben von Funktionsnamen, die Funktiong
sollte in Zeile 6 stehen, dh die Zeile 2 wird von Zeile 6 überschrieben. IMO, das Verhalten von Chrome ist korrekt.
Habe ich recht? Wenn ja, warum gibt Firefox unterschiedliche Ergebnisse aus?