• 实现add(1)(2)(3)-利用toString和函数柯里化


    // 利用了会自动调用toString方法
    // 具体和valueOf了解可以看https://blog.csdn.net/FE_dev/article/details/77151434
    function add(m) {
      var temp = function(n) {
        return add(m + n);
      }
    
      temp.toString = function() {
        return m;
      }
    
      return temp;
    }
    add(1)(2)(3); // 6
    

      



    // 这句话道出了精髓:用闭包把参数保存起来,当参数的数量足够执行函数了,就开始执行函数。 // 引用:https://github.com/mqyqingfeng/Blog/issues/42 var curry = function(fn) { // 获取非fn参数数组 var args = [].slice.call(arguments, 1); return function() { var allArgs = [...args, ...[].slice.call(arguments)]; return fn.apply(this, allArgs); } } // 指定固定的参数 function add(a, b) { console.log(a + b); return a + b; } var addCurry = curry(add, 1, 2); addCurry(); // 1 + 2 var addCurry = curry(add, 1); addCurry(2); // 1 + 2 var addCurry = curry(add); addCurry(1, 2); // 1 + 2 addCurry(1)(2); // 但是还没有达到具体的预期,我们要实现多个参数函数转换一系列使用单个参数的函数 var sub_curry = function(fn) { // 获取非fn参数数组 var args = [].slice.call(arguments, 1); return function() { var allArgs = [...args, ...[].slice.call(arguments)]; return fn.apply(this, allArgs); } } var curry = function(fn, length) { // 获取函数的参数个数 var len = length || fn.length; return function() { var args = [].slice.call(arguments); // 如果参数的数量匹配函数的参数,即执行函数 if (args.length === len) { return fn.apply(this, args); } else { // 参数的数量和匹配函数的数量不匹配时,挤破脑袋想怎么把(1, 2)(3)凑成(1, 2, 3) // (1, 2)(3)凑成(1, 2, 3)也就时如上第一版,这里取名为sub_curry var combined = [fn].concat([].slice.call(arguments)); // combined就如同上面的arguments return curry(sub_curry.apply(this, combined), len - arguments.length); // } } } var addCurry = curry(function(a, b, c) { console.log(a + b + c); return a + b + c; }); addCurry(1, 2, 3); // 6 addCurry(1, 2)(3); // 6 addCurry(1)(2)(3); // 6 addCurry(1)(2, 3); // 6

      

  • 相关阅读:
    第10组 Alpha冲刺 (2/6)
    第10组 Alpha冲刺 (1/6)
    第10组(72) 需求分析报告
    团队介绍及选题报告
    实验 7 : OpenDaylight 实验 —— Python 中的 REST API 调用
    第03组 Alpha冲刺 总结
    第03组 Alpha冲刺 (6/6)
    第03组 Alpha冲刺 (5/6)
    第03组 Alpha冲刺 (4/6)
    第03组 Alpha冲刺 (3/6)
  • 原文地址:https://www.cnblogs.com/chenfengami/p/12705514.html
Copyright © 2020-2023  润新知