• 关于函数柯里化


    今天在群里看到有人提出一个问题,关于如何实现如下效果的sum函数:

    1 sum(1,2); => 3
    2 sum(1)(2); => 3

    本能想到是在考察函数柯里化的知识,但是仔细一看,发现其实难点在于如何让函数的返回值既是函数又是一个简单值。我想了想,做了一个拓展版的函数,支持 sum(1,2,3)(1,2,3) => 12 这样的多参数相加,代码如下,转载请注明出处。

     1 function sum(num1) {
     2 
     3             var argus1 = arguments,
     4                 count;
     5 
     6             function add(arugs) {
     7 
     8                 var len = arugs.length,
     9                     i = 0,
    10                     _sum = 0;
    11 
    12                 for (i; i<len; i++) {
    13                     _sum += arugs[i];
    14                 }
    15 
    16                 return _sum
    17             }
    18 
    19             function doCount(num2) {
    20 
    21                 count = add(argus1);
    22 
    23                 if (typeof num2 != 'undefined') {
    24 
    25                     var argus2 = arguments,
    26                         all = 0;
    27 
    28                     all = count + add(argus2);
    29 
    30                     return all;
    31 
    32                 }
    33 
    34                 return count;
    35             }
    36 
    37             doCount.valueOf = function(){
    38 
    39                 return doCount();
    40 
    41             };
    42 
    43             return doCount;
    44 
    45         }

    这个方法有点hack的意味,因为他其实利用了函数return时会默认使用valueOf方法的原理,通过改写valueOf实现的。

  • 相关阅读:
    oracle序列的使用
    oracle学习
    项目部署的一些问题
    mybatis的resultMap与resultType的区别
    react-router-dom路由switch使用
    Json.parse 和Json.stringfy()用法
    页面中js按顺序加载完全的方法
    伪数组转为真数组
    import和export的作用
    Object.entries()
  • 原文地址:https://www.cnblogs.com/libinfs/p/5948787.html
Copyright © 2020-2023  润新知