zoukankan      html  css  js  c++  java
  • 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)
              }
            }
    
          }
        }
    
  • 相关阅读:
    asp.net 、C#实现微信企业号OAuth2认证
    node event中 on emit off 的封装
    node
    Express中间件
    旋转的魔方
    通过gulp为requireJs引入的模块添加版本号
    css水平垂直居中(绝对定位居中)
    COLOR 与 COLORREF
    VMware Workstation 安装 vmware tools
    MMIV: starter level 1
  • 原文地址:https://www.cnblogs.com/yxyc/p/14820609.html
Copyright © 2011-2022 走看看