利用 bind 实现柯里化
2019-08-08 本文已影响0人
wfatec
首先引用wiki
上对柯里化的解释:柯里化(英语:Currying),是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。
而平时我们在使用bind
方法时,更多的是用来绑定函数的上下文,或者说用来绑定this
。那么柯里化和bind
有什么关系呢?
首先我们来看一下mdn
上对bind
的语法描述:
function.bind(thisArg[, arg1[, arg2[, ...]]])
-
thisArg
:这个我们很熟悉,用于绑定this
-
arg1, arg2, ...
:在函数调用时,依次传入的参数
显然arg1, arg2, ...
就是实现柯里化的关键!
举个例子(来自mdn
):
function list() {
return Array.prototype.slice.call(arguments);
}
function addArguments(arg1, arg2) {
return arg1 + arg2
}
var list1 = list(1, 2, 3); // [1, 2, 3]
var result1 = addArguments(1, 2); // 3
// Create a function with a preset leading argument
var leadingThirtysevenList = list.bind(null, 37);
// Create a function with a preset first argument.
var addThirtySeven = addArguments.bind(null, 37);
var list2 = leadingThirtysevenList();
// [37]
var list3 = leadingThirtysevenList(1, 2, 3);
// [37, 1, 2, 3]
var result2 = addThirtySeven(5);
// 37 + 5 = 42
var result3 = addThirtySeven(5, 10);
// 37 + 5 = 42 , second argument is ignored
从上述例子可以看出,leadingThirtysevenList
和addThirtySeven
都实现了柯里化的效果,我们在编写代码时,活用bind
的这一特性,可以让我们的代码更加优雅。