han's bolg - 年糕記

科里化

  1. bind的概念
1
2
var result = fun.bind(thisArg[, arg1[, arg2[, ...]]]) 
result(newArg1, newArg2...)

bind返回一个新的函数,这个函数要绑定的this对象指向第一个参数,后面的参数是传入新函数的参数。
这个函数的功能和fun函数的功能一样。所以,上面的bind函数可以等价于:

1
result(newArg1, newArg2...) = thisArg.fun(newArg1, newArg2...)

  1. 科里化的概念

1)科里化的目的

1
2
3
func(arg1, arg2, arg3...)类型的函数
转换成
func(arg1)(arg2)(arg3)(...)类型

2)科里化的返回值

所以科里化的返回值仍然是一个函数,这样才能继续执行后面的参数(arg2)(arg3)(…)

3)科里化的定义

将函数与其参数的一个子集绑定起来后返回个新函数。

所以要绑定,就需要bind方法

4)科里化的实现

1
2
3
4
5
6
7
var currying = function(fn) {
var args = [].slice.call(arguments, 1);
return function() {
var newArgs = args.concat([].slice.call(arguments));
return fn.apply(null, newArgs);
};
};