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さんに答えていただければなぁと思うのですが、、、
リクエストに応えてもらえますかねぇ