柯里化的理解

柯里化定义理解

接受多个参数更改为接受单一参数(函数开始的那个参数),处理剩余参数并返回结果的一种技术。

柯里化作用

  1. 延迟计算(javaScript 原生中的 bind 同个效果,都是返回一个函数)
  2. 参数复用(通用一个参数传进来)
  3. 提前返回(执行后返回一个确定的函数,下次调用将直接调用返回的函数)

柯里化的关键点

先看一段代码:

function currying(fn) {
    // 如果是传fn的时候就传参数的话,就需要保存下来
  var args = Array.prototype.slice.call(arguments, 1);
  return function() {
      // 将继续传进来的参数,放到args里面保存起来
    if (arguments.length > 0) {
      [].push.apply(args, arguments);
      return arguments.callee;
    } else {// 如果不传参了,就回调函数
      fn.apply(this, args)
    }
  }
}

显而易见的,柯里化的核心是闭包以及apply回调。

里面的函数引用了外部变量 args ,那么这个变量就可以用来继续保存 fn 传进来的变量了,也就是 arguments 值。当没有传参的时候,使用 apply 回调 fn ,完成。

let sum = 0;
function add() {
  for (let i = arguments.length - 1; i >= 0; i--) {
    sum += arguments[i];
  }
  return sum;
}
var add = currying(add, 100);
add(1)(2)(3)(); // 106
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容