zoukankan      html  css  js  c++  java
  • 函数柯里化和闭包

    函数柯里化是指把函数多个参数,转化成一个参数传入。

    一个简单例子

            let add = (a, b) => a + b
            console.log(add(2, 3));
            // 函数柯里化
            let currying = (a) => (b) => a + b
            console.log(currying(2)(3));

    但是这有啥用呢?

    再看另一个例子:

       let pay = (discount,price) =>discount*price   // 最好把固定的参数写前面
            let curry = discount=>price=>pay(discount,price)
            let discount =  0.1
            let payCurry = curry(discount)  // 这个discount是实参
            let pc = payCurry(500)
             console.log(pc); // 50

    discount是固定的,那就柯里化一下,每次传个价格就好了

    再回归到add方法

    let add = a=>b=>a+b

    把他转换成es5写法:

    就会发现,原来这是个闭包,所以说函数柯里化就是用了闭包的特性!!

      // 转换成es5 ,这是个闭包
        let add = function(a){
            return function(b){
                return a +b 
            }
        }
    
     console.log(add(3)(5)); // 8
        let currying = add(3)
        let curry = bx(5)
        console.log(curry); // 8
  • 相关阅读:
    java
    java
    java
    js
    java
    异常之异常处理
    面向对象之元类
    面向对象之内置方法
    面向对象之反射
    面向对象之类方法与静态方法
  • 原文地址:https://www.cnblogs.com/luguankun/p/13742121.html
Copyright © 2011-2022 走看看