var obj = { name:'东尼大木', getName : function(a,b){ alert(this.name+a+b); } } //科里化函数 function curry(fn,context){ //获取此函数除 fn context 之外所有的参数组成的数组 var args = Array.prototype.slice.call(arguments,2); return function(){ //转换内部匿名函数的参数集合 为一个数组 var innerArgs = Array.prototype.slice.call(arguments); //最终合并的参数集合 var finallyArgs = args.concat(innerArgs); return fn.apply(context,finallyArgs); } } window.onload = function(){ //这样的话既可以绑定作用域,又可以给其固定绑定一个参数,非常灵活 var fun = curry(obj.getName,obj,2); fun(3); }