美文网首页
利用 bind 实现柯里化

利用 bind 实现柯里化

作者: wfatec | 来源:发表于2019-08-08 17:35 被阅读0次

    首先引用wiki上对柯里化的解释:柯里化(英语:Currying),是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术

    而平时我们在使用bind方法时,更多的是用来绑定函数的上下文,或者说用来绑定this。那么柯里化和bind有什么关系呢?

    首先我们来看一下mdn上对bind的语法描述:

    function.bind(thisArg[, arg1[, arg2[, ...]]])

    • thisArg:这个我们很熟悉,用于绑定this

    • arg1, arg2, ...:在函数调用时,依次传入的参数

    显然arg1, arg2, ...就是实现柯里化的关键!

    举个例子(来自mdn):

    function list() {
      return Array.prototype.slice.call(arguments);
    }
    
    function addArguments(arg1, arg2) {
        return arg1 + arg2
    }
    
    var list1 = list(1, 2, 3); // [1, 2, 3]
    
    var result1 = addArguments(1, 2); // 3
    
    // Create a function with a preset leading argument
    var leadingThirtysevenList = list.bind(null, 37);
    
    // Create a function with a preset first argument.
    var addThirtySeven = addArguments.bind(null, 37); 
    
    var list2 = leadingThirtysevenList(); 
    // [37]
    
    var list3 = leadingThirtysevenList(1, 2, 3); 
    // [37, 1, 2, 3]
    
    var result2 = addThirtySeven(5); 
    // 37 + 5 = 42 
    
    var result3 = addThirtySeven(5, 10);
    // 37 + 5 = 42 , second argument is ignored
    

    从上述例子可以看出,leadingThirtysevenListaddThirtySeven都实现了柯里化的效果,我们在编写代码时,活用bind的这一特性,可以让我们的代码更加优雅

    相关文章

      网友评论

          本文标题:利用 bind 实现柯里化

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