JS 之 函数式编程

1. 函数组合应用

由若干个纯函数、偏函数、柯里化函数组合成一个新的函数,同时,形成数据传递。
挑选了一系列所需要的函数,把他们组合在一起,可以实现公共合作的效果。

代码示例:

function combination() {
        var args = Array.prototype.slice.call(arguments);
        return function(x) {
        
   			// reduceRight 具体方法可以查看官方文档
          return args.reduceRight(function(res, ele) { 
            return ele(res);
          }, x);
        };
      }
      var arr = combination(add, spl, toUpper) // 三个函数,三个函数的数据都是相关联的
      		console.log(arr("tzh")); // 打印结果是   TZH520!!!
 	  function toUpper(str) {
        return str.toUpperCase();
      }
      
      function add(str) {
        return str + "!!!";
      }

      function spl(str) {
        return str + "520";
      }

函数组合起来数据自左向右传递,

2. 柯里化

在数学和计算机科学中,柯里化是一种将使用多个参数的一个函数转换成一系列使用一个参数的函数技术

  • 为什么使用柯里化

简化代码结构,提高系统的维护性,一个方法,一个参数,功能内聚,降低耦合

代码模拟柯里化思想


	function add(a, b, c, d) {
        return a + b + c + d;
      }
      
      //截取 arguments 实参 并返回一个函数
      function agent(fn) {
        var args = Array.prototype.slice.call(arguments, 1);
        return function() {
          var arr = args.concat(Array.prototype.slice.call(arguments, 0));

          return fn.apply(this, arr);
        };
      }
	// 柯里化核心思想代码
	function currie(fn, length) {
        var length = length || fn.length;

        return function() {
          var arg_len = arguments.length;

          if (length != arg_len) {
            var arg = [fn].concat([].slice.call(arguments, 0));
            return currie(agent.apply(this, arg), length - arg_len);
          } else {
            return fn.apply(this, arguments);
          }
        };
      }

      var curries = currie(add);
      // 多种形式组合调用
      var num1 = curries(1,3)(3)(4)
      var num2 = curries(1,3,3)(4)
      var num3 = curries(1,3)(3)(4)
      console.log(num1,num2,num3);// 打印结果都是 13
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值