Js柯里化

柯里化:函数接受一些参数,但不立即求值;返回一个匿名函数将参数保存下来;需要求值时将保存的全部参数一起用掉。(保存时穿参/求值时不传参)。

举个栗子:Js中用bind()函数实现

function foo(a, b, c) {
  console.log("a:" + a + ",b:" + b + ",c" + c)
}
var ∅ = Object.create()  //创建空对象,不带property
foo.apply(∅, [1, 2, 3])   // a:1 b:2 c:3

var bar = foo.bind(∅, 2)
bar(3,4)  // a:2 b:3 c:4

解释: 固定第一个参数a:2 剩下的b,c通过传参赋值

或者:

function foo(...args) {
  console.log("a:" + args[0] + ",b:" + args[1]+ ",c" + args[2])
}
var ∅ = Object.create()  //创建空对象,不带property
var bar = foo.bind(∅, 2)
bar(3,4)  // a:2 b:3 c:4

举个栗子:求一个月中每一天的花销总和(每天的花销不重要,只求最后的。)

var cost = (function() {
  var money = 0;
  return function() {
    for(var i=0; i<arguments.length; i++) {
      money += arguments[i]
    }
    return money
  }
})();

var currying = function(fn) {
  var args = [];
  return function() {
    if(arguments.length === 0) {
      return fn.apply(this, args);
    } else {
      [].push.apply(args, arguments);
      return arguments.callee;
    }
  }
};

var cost = currying( cost ) //柯里化


cost(100);
cost(200);
cost(300); // 不求值

console.log( cost() ); // 求值 600

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在计算机科学中,柯里化(Currying)是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函...
    三月孙记风阅读 1,163评论 0 0
  • 什么是柯里化 柯里化就是预先将函数的某些参数传入,得到一个简单的函数,但是预先传入的参数被保存在闭包中,因此会有一...
    鸭梨山大哎阅读 2,656评论 1 3
  • 柯里化是指将函数原有的一系列参数转化为依次使用一个参数的原理 原函数 let add = (a,b) => a+b...
    淡淡紫色阅读 4,655评论 0 1
  • 引用一下百科对柯里化的解释:在计算机科学中,柯里化(Currying)是把接受多个参数的函数变换成接受一个单一参数...
    dotdiw阅读 4,218评论 1 2
  • 修复多系统如 win10 的引导: 主板设置为启动全基于 BIOS PE 用 DISM++ 恢复某个盘的 win1...
    yingshaoxo阅读 1,683评论 0 0