什么是函数柯里化

作者 : 开心源码 本文共1350个字,预计阅读时间需要4分钟 发布时间: 2022-05-13 共207人阅读

柯里化,即Currying,可以是函数变得更加灵活。我们可以一次性传入多个参数调用它;也可以只传入一部分参数来调用它,让它返回一个函数去解决剩下的参数。

var add = function(x) {    return function(y) {        return x + y;    };};console.log(add(1)(1)); // 输出2var add1 = add(1);console.log(add1(1)); // 输出2var add10 = add(10);console.log(add10(1)); // 输出11

代码中,我们可以一次性传入2个1作为参数add(1)(1),也可以传入1个参数之后获取add1与add10函数,这样使用起来非常灵活。
在实际项目中,柯里化通常有以下三大作用

  • 参数复用
  • 提前确认
  • 推迟运行

一、参数复用

所谓参数复用,就是利用闭包的原理,让我们前面传输过来的参数不要被释放掉。看一下下面这段代码就显而易见了:

// 正常封装check函数进行字符串正则匹配function check(reg, txt) {    return reg.test(txt)}check(/\d+/g, 'test')        //falsecheck(/[a-z]+/g, 'test')     //true// 使用柯里化函数进行字符串正则匹配function curryingCheck(reg) {    return function (txt) {        return reg.test(txt)    }}var hasNumber = curryingCheck(/\d+/g)var hasLetter = curryingCheck(/[a-z]+/g)hasNumber('test1')      // truehasNumber('testtest')   // falsehasLetter('21212')      // false

二、 提前确认

这一特性经常是用来对浏览器的兼容性做出少量判断并初始化api,比方说我们目前用来监听事件大部分情况是使用addEventListener来实现的,但是少量较久的浏览器并不支持该方法,所以在使用之前,我们可以先做一次判断,之后便可以省略这个步骤了。

var on = (function () {    if (document.addEventListener) {        return function (element, event, handler) {            if (element && event && handler) {                element.addEventListener(event, handler, false);            }        };    } else {        return function (element, event, handler) {            if (element && event && handler) {                element.attachEvent('on' + event, handler);            }        };    }})();

三、 推迟运行

js中的bind这个方法,用到的就是柯里化的这个特征。

Function.prototype.bind = function (context) {    var _this = this    var args = Array.prototype.slice.call(arguments, 1)     return function() {        return _this.apply(context, args)    }}
说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 什么是函数柯里化

发表回复