id:amachanさんのプレゼンツールが凄い&functionの書き方

id:amachangさんのプレゼンツールが凄い。こういうのが欲しかったんです。

で、本題はそこではなく、そのソースコード。できればid:amachangさんに答えてもらえないかと。。。

functionの書き方は2種類じゃない?

今まで知らなかったんですけど、javascriptでfunctionの定義の仕方は次の2つしかないと思っていました。

var hoge = function() { alert(arguments.callee); };
// または
function hoge() { alert(arguments.callee); }

上の方は匿名functionで名前がついていない関数なので、実行すると

hoge();
// function() {
// alert(arguments.callee);
// }

と表示されます。

もう一方を実行すると

hoge();
// function hoge() {
// alert(arguments.callee);
// }

となります。で、自分はこの二つしか定義方法がないと思っていたのですが、そのプレゼンツールのソースを見たところ

var hoge = function fuga() { }

のようなことをしています。正直、このコードを見たときはびっくりしました。

これって何してるんだろう

で、どこを調べたらこのコードのような文法が許されるのか分からなかったので、Firefox限定ですが挙動を調べてみました。

まず、

var hoge = function fuga() {alert(arguments.callee);}
hoge();
// function fuga() {
// alert(arguments.callee);
// }

となりますが

var hoge = function fuga() {alert(arguments.callee);}
fuga // undefined

となりました。
つまり、関数名としてfugaを使用するけれども関数のポインタを関数名に代入せず、hogeに代入するという事でしょうか。
なお、Safari 2.0ではこの構文使えないみたいです。

疑問が残るのですが、このような構文を使うメリットは何なのでしょうか?できればid:amachangさんに答えていただければなぁと思うのですが、、、
リクエストに応えてもらえますかねぇ