美文网首页
Js柯里化

Js柯里化

作者: 吃萝卜的小兔子 | 来源:发表于2018-11-19 17:20 被阅读0次

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

    举个栗子: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
    
    

    相关文章

      网友评论

          本文标题:Js柯里化

          本文链接:https://www.haomeiwen.com/subject/vhyafqtx.html