百度百科: 柯里化(Currying)是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数且返回结果的新函数的技术。
示例函数
// 判断传入的内容和类型是否一直const checkType = function (type, content) {return Object.prototype.toString.call(content) === `[object ${type}]`}console.log('原始版-类型是否正确 :>> ', checkType('Number', 10));
简易版: 针对指定函数柯里化
// 1. 传入类型const simpleCurrying = function (type) {// 2. 传入内容return function (content) {// 3. 执行函数checkTypereturn checkType(type, content);};};const isNumberSimple = simpleCurrying('Number')console.log('简易版-类型是否正确 :>> ', isNumberSimple(10));
通用的柯里化函数
/*** 函数=>柯里化* @param {*} func 待柯里化的函数* @param {*} args 保存参数列表* @returns*/function createCurry(func, args = []) {// 获取func的参数个数const funcSize = func.length// 依次拆分func为更明确的函数return function () {// 获取当前传入的参数列表const params = Array.prototype.slice.call(arguments)// 依次缓存参数列表直到满足执行func为止const _args_ = args.concat(params)if (_args_.length < funcSize) {// 递归创建执行下一步的函数return createCurry(func, _args_)}// 参数列表一致后执行func函数return func(..._args_)}}const curryingType = createCurry(checkType)const isNumber = curryingType('Number')console.log('通用版-类型是否正确 :>> ', isNumber(10));
