JavaScript基础——柯里化

currying又称部分求值。一个currying的函数首先会接受一些参数,接受了这些参数之后,该函数并不会立即求值,而是继续返回另外一个函数刚才传入的参数在函数形成的闭包中被保存起来。待到函数被真正需要求值的时候,之前传入的所有参数都会被一次性用于求值。柯里化的目的是为了固定参数, 延迟计算,可以在开发中非常优雅的处理复杂逻辑等。

而反柯里化函数,从字面讲,意义和用法跟函数柯里化相比正好相反,扩大适用范围,创建一个应用范围更广的函数。使得本来只有特定对象才适用的方法,扩展到更多的对象。这里我们重点介绍柯里化过程。

柯里化的通用化原型为:

var currying = function (fn) { //闭包
  var args = [].slice.call(arguments, 1);  //返回的是除fn(第一个参数)外的其他部分参数
  return function () {
    var newArgs = args.concat([].slice.call(arguments)); //两次arguments是不一样的参数,组合起来去调用fn
    return fn.apply(null, newArgs);
  };
};

[].slice.call(arguments, 1)和Array.prototype.slice.call(arguments, 1)是等价的,都是通过slice裁切arguments对象,裁切完后根据slice的特性会返回一个新的数组,而slice(1)说明取新数组的第2个元素到最后的元素,也就是去除 fn 函数的其他所有参数。

示例:

var foo = function (x) {
  return function (y) {
    return x + y;
  };
};
foo(3)(4);

猜你喜欢

转载自blog.csdn.net/huaf_liu/article/details/115434471
今日推荐