柯里化的理解

柯里化定义理解

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

柯里化作用

  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

你可能感兴趣的:(柯里化的理解)