Dzieje się tak ze względu na brak Firefox funkcja podnoszenia, jak pomyślany w ECMAScript 5.
chrom prawidłowo przypisuje się wartość f() przed wykonaniem funkcji ciała, więc pierwszą wersję f() jest zastępowany przez drugi.
SpiderMonkey (silnik JavaScript Firefoksa) uruchamia kod bez wstępnego assignin wartość do f(), tak używa tylko wartość, która napotka na swej drodze: function f() { alert("yes"); };
Co znajduje się funkcja podnoszący?
Zakres funkcji JavaScript oznacza, że wszystkie zmienne zadeklarowane w funkcji są widoczne w całym ciele funkcji . Co ciekawe, oznacza to, że zmienne są widoczne nawet przed ogłoszeniem. Ta cecha JavaScriptu jest nieformalnie nazywana podnoszeniem: Kod JavaScript zachowuje się tak, jakby wszystkie deklaracje zmiennych w funkcji (ale nie wszystkie przypisane przypisania ) były "podnoszone" do górnej części funkcji.
źródła:
http://statichtml.com/2011/spidermonkey-function-hoisting.html
2011 - O'Reilly - JavaScript - The Definitive Guide 6. edycji