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?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage