ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

JS`柯理化`

2021-05-28 08:01:40  阅读:208  来源: 互联网

标签:工作岗位 name 理化 前端 job JS say 阿里巴巴


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)
          }
        }

      }
    }

标签:工作岗位,name,理化,前端,job,JS,say,阿里巴巴
来源: https://www.cnblogs.com/yxyc/p/14820609.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有