函数柯里化用来创建已经设置好一个或多个参数的函数。
下面是一个用来创建柯里化函数的通用函数。
function curry(fn) { var outerArgs = Array.prototype.slice.call(arguments, 1); return function() { var innerArgs = Array.prototype.slice.call(arguments), finalArgs = outerArgs.concat(innerArgs); return fn.apply(null, finalArgs); //注意别漏了return }; }
这个函数很有用,比如可以向定时器传递一个带参数的函数,如下:
function sayHi(name) { alert("Hi," + name); } setTimeout(curry(sayHi, "yhj"), 1000);