javascriptでlet風にかくならこうでしょう.

(function () { return; } ());

でもやっぱ,おしりに引数の値を渡す書式が気に入らない.

なぜかって,引数と渡す値の関係が分かりずらい.

で,

let ({a : 3, b : 4}, function () { return (a + b); });

と,書けるか詮索してみる.

で,考えた結果がこう.

var let = function () {
    var str = "(function (";
    arg = [];
    val = [];
    for (var a in arguments[0]) {
        arg.push (String (a));// all arguments cast to string type
        val.push (arguments[0][a]);
    }
    str = str + String (arg) + ") { return (" +  String (arguments[1]) + ") (); })";
    return (eval (str)).apply (this, val);
};

// test
alert (let ({a : 3, b : 4}, function () { return (a + b); }));
// 結果 : 7

これで多分おk

firefoxsafariとv8(のシェル)では動作確認しました.

でも,recursionはうごかなかった.

 let ({a : 3}, function () {
    if (a == 0) {
        return 0;
    } else {
        return arguments.callee (a - 1);
    }
});

ああ,calleeの引数に値を渡しても意味ないし...

改良が必要だな.

それにしても,こんなエゴな事を実行速度を下げてまでやる必要があるのだろか...

                                                                                                                                                            • -

ここまでたどり着くのにevalの謎めいた仕様の差に悩まされたり,なぜかfirebugが止まりまくったり,さりげなく時間がかかったのは秘密です♪

■evalの細いこと.
http://d.hatena.ne.jp/language_and_engineering/20080919/1221761313