• 函数柯里化


    柯里化函数概念就是将一个多参数的函数 转化为单一参数的函数;

    举个栗子

    function add(a,b,c){

      return a + b + c;

    }

    现在需要让这个函数能够实现这么调用 add(1)(2)(3)或者add(1,2)(3) 或者add(1,2,3)

    使用curry函数对这个函数进行柯里化

    function curry(func){
        let argLength = func.length; // 获取函数参数的个数
      let curried = (...args) => {
              // 需要把参数凑齐了 才能执行传入的func函数 ,最终要返回  func(...args)
              // 所以当参数不够的时候继续执行柯里化,收集参数 
             if(args.length < argLength) {
               // 收集参数
                return (...rest) => curried(...args, ...rest)
             }else {
                 // 参数齐了 执行func
                  return func(...args)
            }
       }
      // 返回这个函数
      return curried
    }


      

    测试: 

    let add2 = curry(add)
    console.log(add2(1, 2)(3))  // 6
    console.log(add2(1)(2)(3))  // 6
    

      

    然后我们看到很多地方有箭头函数连续写的

    例如let func = a => b => c => {return a+b+c}

    其实就是一个柯里化的过程,是属于es6的多次柯里化过程

    let func2 = a => (b,c) => (de) => { return a + b +c +de}
    调用

    func(1)(2)(3)

    func2(1)(2,3)(4)

    但是我们可以将前两次传参存给一个变量, 这样 最后一次我们再传参再决定求值

    例如  

    let add3 = func(3)

    let add4 = add3(1)

    现在我们重新定义了两个函数,任何数和add3或者add4相加

    add3(3) // 6

    add4(4) // 8

    所以我们得出以下结论

    柯里化函数的功能

    1. 可以惰性求值
    2. 可以提前传递部分参数
  • 相关阅读:
    Xcode官方下载地址
    IOS9 Swift
    IOS常用框架
    JS 阻止事件冒泡
    ASP.NET MVC验证DateTime的问题
    如何将图片嵌入到Html中
    Linq使用中的ToList注意事项
    LINQ to Entity里面不能使用DateTime
    SQL Procedure Operations
    Windows Service Operations
  • 原文地址:https://www.cnblogs.com/qqfontofweb/p/16145689.html
Copyright © 2020-2023  润新知