今天,我们记录一下js中的函数柯里化,对于小白,接触到柯里化这三个字,内心很崩溃,其实只是一个比较高深的名字,函数柯里化说人话就是:使用一个闭包返回一个函数(这里默认大家知道什么叫做闭包),函数需要设置一些传入的参数。
下面是一段函数柯里化的代码:
function curry(fn){
var args = Array.prototype.slice.call(arguments, 1);
return function(){
var innerArgs = Array.prototype.slice.call(arguments);
var finalArgs = args.concat(innerArgs);
return fn.apply(null, finalArgs);
};
}
curry()函数的主要工作就是将被返回函数的参数进行排序。curry()的第一个参数是要进行柯里 化的函数,其他参数是要传入的值。这个函数并没有考虑到执行环 境,所以调用 apply()时第一个参数是 null。
ECMAScript 5的 bind()方法也实现函数柯里化,只要在 this 的值之后再传入另一个参数即可
var handler = {
message: "Event handled",
handleClick: function(name, event){
alert(this.message + ":" + name + ":" + event.type);
}
};
var btn = document.getElementById("my-btn");
EventUtil.addHandler(btn, "click", handler.handleClick.bind(handler, "my-btn"));