博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于js中的柯里化(Currying)与反柯里化(Uncurrying)
阅读量:6094 次
发布时间:2019-06-20

本文共 1489 字,大约阅读时间需要 4 分钟。

今天了解到一个新名词:柯里化,研究一番后总结如下:

一· 柯里化

定义

把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数且返回结果的新函数的技术。缩小适用范围,创建一个针对性更强的函数。

通用实现

Function.prototype.currying = function (arg1) {    var _this = this;    return function () {        [].unshift.call(arguments, arg1);        return _this.apply(_this, arguments);    }};

示例

1.现有一个求和函数:

function sum(a, ...num) {    return num.reduce((sum, e) => {        return sum + e;    }, a);}

我们想要它在100的基础上求和则可以实现如下(有点类似python中的装饰器):

var total = sum.currying(100)(5, 6, 7, 8);console.log(total)//126

2.测试接口请求:

var testApi = $.post.currying('/crm/customer/add');var cb = (data) => console.log(data);testApi({name: '大卫', 'sex': '男'}, cb);testApi({name: '小卫', 'sex': '女'}, cb);testApi({name: '中卫', 'sex': '人妖'}, cb);

或者这样:

var testApi = ((url) => {    return function () {        $.post(url, arguments[0], (data) => console.log(data))    }})('/crm/customer/add');testApi({name: '大卫', 'sex': '男'});testApi({name: '小卫', 'sex': '女'});testApi({name: '中卫', 'sex': '人妖'});

二· 反柯里化

定义

基本就是柯里化反向操作了。扩大适用性。

通用实现

Function.prototype.uncurrying = function () {    var _this = this;    return function () {        return _this.apply(arguments[0], [].slice.call(arguments, 1))    }};

示例

上边的通用实现方法中,由于:arguments对象不是一个 Array 。它类似于Array,但除了长度之外没有任何Array属性,但可以对它使用Array的方法。操作时需要这样:Array.prototype.unshift.call(arguments, arg)[].unshift.call(arguments, arg)

如果使用反柯里化,则可以这样写:

var array_unshift = Array.prototype.unshift.uncurrying();array_unshift(arguments, arg)//震惊!某前端只会php,竟月入百万。。。

转载地址:http://njwza.baihongyu.com/

你可能感兴趣的文章
自己制作交叉编译工具链
查看>>
Qt Style Sheet实践(四):行文本编辑框QLineEdit及自动补全
查看>>
[物理学与PDEs]第3章习题1 只有一个非零分量的磁场
查看>>
深入浅出NodeJS——数据通信,NET模块运行机制
查看>>
onInterceptTouchEvent和onTouchEvent调用时序
查看>>
android防止内存溢出浅析
查看>>
4.3.3版本之引擎bug
查看>>
SQL Server表分区详解
查看>>
使用FMDB最新v2.3版本教程
查看>>
SSIS从理论到实战,再到应用(3)----SSIS包的变量,约束,常用容器
查看>>
STM32启动过程--启动文件--分析
查看>>
垂死挣扎还是涅槃重生 -- Delphi XE5 公布会归来感想
查看>>
淘宝的几个架构图
查看>>
Android扩展 - 拍照篇(Camera)
查看>>
JAVA数组的定义及用法
查看>>
充分利用HTML标签元素 – 简单的xtyle前端框架
查看>>
设计模式(十一):FACADE外观模式 -- 结构型模式
查看>>
iOS xcodebuile 自动编译打包ipa
查看>>
程序员眼中的 SQL Server-执行计划教会我如何创建索引?
查看>>
【BZOJ】1624: [Usaco2008 Open] Clear And Present Danger 寻宝之路(floyd)
查看>>