■
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
firefoxとsafariと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