lodash 实现JS 函数柯里化

1. 柯里化

在计算机科学中,柯里化(英语:Currying),又译为卡瑞化或加里化,是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。
柯里化是一种处理函数中附有多个参数的方法,并在只允许单一参数的框架中使用这些函数。例如,一些分析技术只能用于具有单一参数的函数。现实中的函数往往有更多的参数。

2. lodash

一个一致性、模块化、高性能的 JavaScript 实用工具库。
Lodash 通过降低 array、number、objects、string 等等的使用难度从而让 JavaScript 变得更简单。
Lodash 的模块化方法 非常适用于:

  • 遍历 array、object 和 string
  • 对值进行操作和检测
  • 创建符合功能的函数
  1. lodash 入门
  2. lodash官方文档

3. _.curry示例

let _  = require('lodash');

let abc = (a,b,c)=>[a,b,c];
let curried = _.curry(abc);

let result = curried(1)(2)(3);
console.log(result);  // => [1, 2, 3]

result = curried(1, 2)(3);
console.log(result);  // => [1, 2, 3]

result = curried(1, 2, 3);
console.log(result);  // => [1, 2, 3]


// Curried with placeholders.
let result2 = curried(1)(_, 3)(2);
console.log(result2);  // => [1, 2, 3]

如上述示例代码,原先的abc方法接收3个参数。经过柯里化后的curried可以分次接收这三个参数而不需要一次获取。
另外,_.curry支持占位符placeholder,使用_作为占位符相当于允许参数可以不按照固有的传参顺序进行调用。
比如上述代码中的curried(1)(_, 3)(2);在这里先传入了参数1,在第二个参数还没有ready的情况下,传入了一个占位符_和参数3, 最后传入第二个参数2不在占位符的位置。 所以最终的返回结果还是[1,2,3]。

result2 = curried(_)(2,2)(1);
console.log(result2);  // [2,2,1]

result2 = curried(_,2)(3)(1);
console.log(result2) // [2,3,1]
注意

1. _.curry()提供的占位符_会被其相邻的下一次函数调用的第一个参数所填充。
2. 必须传入原函数所需要的所有参数后才能实现函数的调用。当为传入全部参数时,其response是一个柯里化的函数。

let curriedFunc = curried(1,2);
console.log(typeof curriedFunc);  // function

你可能感兴趣的:(深入理解js)