winter版: <script>function currying(func)...{ return function() ...{ if(arguments.length<func.length) ...{ var args=arguments; var retarg=new Array(func.length-arguments.length); for(var i=0;i<retarg.length;i++)retarg[i]="_"+i; eval("var ret=function("+retarg+"){return args.callee.apply(this,Array.prototype.slice.call(args).concat(Array.prototype.slice.call(arguments)));}"); return currying(ret); } else return func.apply(this,arguments); }}/////////////////////////////////////////////////////////////////////////////////////////function f(a,b,c)...{ alert([a,b,c]);}var cuf=currying(f);cuf(1)(2)(3);cuf(1,2)(3);</script> muxrwc 版 <script type="text/ecmascript">function currying(func) ...{ return function () ...{ var root = this, args = arguments, sourceFunc = args.callee; if (args.length < func.length) ...{ return function () ...{ return sourceFunc.apply( root , Array.prototype.slice.call(args).concat( Array.prototype.slice.call(arguments) ) ); }; } else return func.apply(this, args); };}/////////////////////////////////////////////////////////////////////////////////////////var f = function (a, b, c) ...{ alert([a, b, c]);}var cuf = currying(f);cuf(1)(2)(3);cuf(1, 2)(3);cuf(1, 2, 3);</script> 月版^^ <script>function currying(func)...{ return function() ...{ var args = Array.prototype.slice.call(arguments,0); if(args.length<func.length) ...{ return function()...{ var _args = args.concat(Array.prototype.slice.call(arguments,0)); return currying(func).apply(this,_args); } } else return func.apply(this,args); }}/////////////////////////////////////////////////////////////////////////////////////////function f(a,b,c)...{ alert([a,b,c]);}var cuf=currying(f);cuf(1)(2)(3);cuf(1,2)(3);</script>