Js 实现柯里化(ES5,ES6)
柯里化(Currying)是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数且返回结果的新函数的技术。
基础的柯里化
- 演示
function add(a, b) { return a + b; } function curring(fn) { return function (arg1) { return function (arg2) { return fn(arg1, arg2); }; }; } curring(add)(1)(2); // 返回值为 3
这样就可以对一个函数实现实现柯里化,但这样的方式并不通用,实际的开发过程中由于参数数量的不确定性,不会对每一个需要柯里化的函数单独的进行封装,这时候需要基于柯里化的思想封装一个通用的柯里化函数。
通用的柯里化实现
在实现柯里化的过程中主要需要注意以下几点:
- arguments 是一个伪数组
- 使用递归的思想来实现参数不确定的情况
ES5 实现
function curry(fn) { return function curriedFn() { var _args = Array.prototype.slice.call(arguments); if (_args.length < fn.length) { return function () { var _args2 = Array.prototype.slice.call(arguments); return curriedFn.apply(null, _args.concat(_args2)); }; } return fn.apply(null, _args); }; }
ES6 实现
在 ES6 环境中可以使用 ES6 语法糖对上面的代码进行简化。
function curry(fn) { return function curriedFn() { var _args = Array.prototype.slice.call(arguments); if (_args.length < fn.length) { return function () { var _args2 = Array.prototype.slice.call(arguments); return curriedFn.apply(null, _args.concat(_args2)); }; } return fn.apply(null, _args); }; }

浙公网安备 33010602011771号