在计算机科学中,柯里化(英语:Currying),又译为卡瑞化或加里化,是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。 – 维基百科
函数柯里化的好处在于:
1.函数复用:
1 2 3 4 5 6 7 8
| const match = (reg, str) => { console.log(str.match(reg)); };
const reg = /\s+/g;
match(reg, 'hello world'); match(reg, 'spaceless');
|
函数柯里化实现:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| const curry = fn => { return (...args) => { return (...cb) => { return fn.apply(null, [...args, ...cb]); }; }; };
const match = curry((reg, str) => { console.log(str.match(reg)); }); const hasSpace = match(/\s+/g);
hasSpace('hello world'); hasSpace('spaceless');
|
缩小函数的适用范围,但同时提高函数的适用性
2.延迟执行
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| const curry = (fn) => { return (...args) => { return function _f() { if (arguments.length) { args.push(...arguments); return _f; } return fn.apply(null, args); }; }; };
const add = curry((...arr) => { return arr.reduce((next, p) => { return next + p; }, 0); });
console.log(add(1, 2, 3, 4)(5)()); console.log(add(1)(2)(3)(4)(5)());
|
累积传入参数,当不传参数的时候,最后执行。
参考地址: