2009/08/26

[JavaScript]無名関数(lambda)の戻り値

iPhoneのアプリを申請している間、少し時間があいたので、久しぶりにJavaScriptについて。

無名関数を使って引数を右から2文字取り出す関数を考えました。

function gf_TimeFormat(aparam){
return
(
function(astr){
return astr.substr(astr.length-2,2);
}("00" + aparam.toString())
);

}

これを下のように実行してみます。

alert(gf_TimeFormat(0));

本来ならば、「00」と表示して欲しいのですが、残念ながら「undefined」と返されてしまいました。

しかし、下記のように一度変数にセットすると、値が返されるのですが、理由がいまひとつわからないのです。

function gf_TimeFormat(aparam){
//aに結果を一度セットしている
return a =
(
function(astr){
return astr.substr(astr.length-2,2);
}("00" + aparam.toString())
);
}

変数にセットしないと関数が評価されないという仕様なのかなーっと、ひらきなおってみる今日この頃。

lambda奥深し!!

(追記)
firefox3で動作確認を行いました。

1 件のコメント:

  1. >>残念ながら「undefined」と返されてしまいました。

    これ、多分

    return
    (

    ↑これが問題じゃない?
    JavaScriptって改行場所によっては
    勝手に終端(セミコロンだね)を付与した形で解釈しちゃうはず。なんで

    return (

    ってすれば正しく動くのではないかと予測。

    相変わらず検証はしてないので試してみておくれ。

    返信削除