什么是函数柯里化

作者: 前端辉羽 | 来源:发表于2019-12-23 14:12 被阅读0次

本文目录

  • 1.初步认识
  • 2.作用一、参数复用
  • 3.作用二、提前确认
  • 4.作用三、 延迟运行

1.初步认识

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

var add = function(x) {
    return function(y) {
        return x + y;
    };
};

console.log(add(1)(1)); // 输出2

var add1 = add(1);
console.log(add1(1)); // 输出2

var add10 = add(10);
console.log(add10(1)); // 输出11

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

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

2.作用一、参数复用

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

// 正常封装check函数进行字符串正则匹配
function check(reg, txt) {
    return reg.test(txt)
}
check(/\d+/g, 'test')        //false
check(/[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')      // true
hasNumber('testtest')   // false
hasLetter('21212')      // false

3.作用二、提前确认

这一特性经常是用来对浏览器的兼容性做出一些判断并初始化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);
            }
        };
    }
})();

4.作用三、 延迟运行

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)
    }
}

相关文章

  • JS函数式编程之柯里化

    JS函数式编程之柯里化 为什么要了解柯里化 柯里化是函数式编程必须要使用的. 这里我们就先介绍下什么是柯里化, 然...

  • swift 柯里化

    swift 柯里化 柯里化 1、什么是柯里化? 柯里化是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一...

  • [译]JavaScript中的函数柯里化

    原文 Currying in JS 函数柯里化 函数柯里化以Haskell Brooks Curry命名,柯里化是...

  • js柯里化

    标签: js柯里化 js柯里化 柯里化是什么在计算机科学中,柯里化(Currying)是把接受多个参数的函数变换成...

  • 手写简单.bind()实现

    手写一个实现柯里化的.bind() 柯里化:《函数柯里化小结》柯里化:前端开发者进阶之函数柯里化Currying ...

  • 什么是函数柯里化

    柯里化,即Currying,可以是函数变得更加灵活。我们可以一次性传入多个参数调用它;也可以只传入一部分参数来调用...

  • 什么是函数柯里化

    今天看了一个关于函数式编程的文档[https://llh911001.gitbooks.io/mostly-ade...

  • 柯里化函数与反柯里化函数

    什么是柯里化(currying) 柯里化是一个将多元函数转化为低元函数的操作过程,可以看做是多元函数的部分求值过程...

  • JS 函数柯里化的简单探究

    什么是柯里化? 柯里化(Currying)是一种对于函数的高阶转换,它指的是将一个函数从可调用的 fn(a, b,...

  • JavaScript的柯里函数

    什么是柯里化函数 柯里化函数是把原来接受多个参数的函数变换成接受一个单一参数的函数,并且返回接受余下的参数而且返回...

网友评论

    本文标题:什么是函数柯里化

    本文链接:https://www.haomeiwen.com/subject/wjdznctx.html