こんなケースがありました。(※jQueryを使ってます)
var foo = function() { // do something... }; // 最初に一回だけ実行する foo(); // ウィンドウリサイズイベントをリッスンする $(window).resize(foo);
で、コレを何とか1行で書けないかなぁ、と思ったので次のようにしました。
// ウィンドウリサイズイベントをリッスンする $(window).resize( function() { // do something... return arguments.callee; //自分自身を返す }() // 関数を作成して同時に一度実行する→戻り値が自分自身なのでresizeの引数として渡せる );
これで(ムリヤリだけど)1行で書けたことになります。
しかし。。。
上記のスクリプトをECMAScript5 Strict Modeで動作させると、
『calleeは使うなゴルァ!』というエラーが出る。
さてどうしたものか、と考えたのですが、このようにすると良いことがわかりました。
"use strict"; $(window).resize( function resizeHandler() { // do something... return resizeHandler; // calleeを使うのをやめ、関数名で参照 }() );
これで正しく動作します。つまり、Javascriptにおける関数宣言は式(Expression)だったわけです。
知らなかった。。。
ちなみに
コレはダメ。エラーになります。
$(window).resize( var resizeHandler = function() { // do something... return resizeHandler; }() );
追記
上記のコードは大体のブラウザで動きますが、これはECMAScriptの仕様違反らしいです。
IE9では、個のコードがエラーになるように『修正』されたらしい。