• JS`柯理化`


    JS柯理化

    • 【百度】:把接受多个参数的函数变成单一参数的函数,并返回接受多个不同的参数且返回结果的新函数

    • 【红宝书3】:使用一个闭包返回一个函数,当函数被调用时,返回的函数还需要设置一些传入的函数。

    • 【犀牛书7】:操作函数的函数,它接受或多个函数作为参数并返回一个新函数。

    • 柯里化是一种函数的转换,它是指将一个函数从可调用的 f(a, b, c) 转换为可调用的 f(a)(b)(c)

    使用场景特点:

    • 参数复用
    • 提前确认避免每次重复判断
    • 延迟计算运行
       function say(company, job, name) {
          console.log(`我的公司是${company},工作岗位是${job},名字是${name}`);
    }
    say('阿里巴巴','前端','小米');
    say('阿里巴巴','前端','小明');
    say('阿里巴巴','前端','潇潇');
    //我的公司是阿里巴巴,工作岗位是前端,名字是小米
     //我的公司是阿里巴巴,工作岗位是前端,名字是小明
     //我的公司是阿里巴巴,工作岗位是前端,名字是潇潇
    
    柯理化
    function say(company, job) {
          return function (name) {
            console.log(`我的公司是${company},工作岗位是${job},名字是${name}`);
          }
        }
        
        say('阿里巴巴')
    //ƒ (job) {
    //   return function (name) {
    //     console.log(`我的公司是${company},工作岗位是${job},名字是${name}`);
    //        }
    //      }
    
    
    say('阿里巴巴','前端')
    //ƒ (name) {
     //console.log(`我的公司是${company},工作岗位是${job},名字是${name}`);
    //     }
    
    say('阿里巴巴')('前端')
    // 我的公司是阿里巴巴,工作岗位是undefined,名字是前端
    
      say('阿里巴巴','前端')('小米')
    //我的公司是阿里巴巴,工作岗位是前端,名字是小米  
    
    再柯理化
     function say(company) {
          return function (job) {
            return function (name) {
              console.log(`我的公司是${company},工作岗位是${job},名字是${name}`);
            }
          }
        }
        
        
         say('阿里巴巴')
    //ƒ (job) {
    //   return function (name) {
    //     console.log(`我的公司是${company},工作岗位是${job},名字是${name}`);
    //        }
    //      }
    
    
    say('阿里巴巴')('前端')
    //ƒ (name) {
     //console.log(`我的公司是${company},工作岗位是${job},名字是${name}`);
    //     }
    
    
      say('阿里巴巴')('前端')('小米')
    //我的公司是阿里巴巴,工作岗位是前端,名字是小米    
       
       
         let setcompany = say('阿里巴巴')('前端');
        setcompany('小米');
         setcompany('潇潇');
         setcompany('小明');
         
    //我的公司是阿里巴巴,工作岗位是前端,名字是小米
    // 我的公司是阿里巴巴,工作岗位是前端,名字是潇潇
    //我的公司是阿里巴巴,工作岗位是前端,名字是小明
    

    封装柯理化函数:

        //被柯理化的函数
        function curry(fn) {
          //记录fn的参数个数
          let len = fn.length;
          return function temp() {
            // 收集本地的传递参数
            let args = [...arguments];
            if (args.length >= len) {
              return fn(...args)
            } else {
              return function () {
                return temp(...arg, ...arguments)
              }
            }
    
          }
        }
    
  • 相关阅读:
    输入框只能输入正数且保留小数后2位数字,正则
    vscode安装ESlint配置
    kubreretes && docker 模块
    python3安装sqlite3库
    dokcerfile 制作Msql镜像
    前端模板
    Python SMTP发送邮件
    k8s-api
    openpyxl
    k8s mysql主从
  • 原文地址:https://www.cnblogs.com/yxyc/p/14820609.html
Copyright © 2020-2023  润新知